我排第几个
时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?

输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia样例输出
1
302715242
260726926

#include <stdio.h>
#include <string.h>
int JC(int n)
{
    int i,sum=1;
    for(i=1;i<=n;i++)
    sum*=i;
    return sum;
}
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int a[15];
        char s[15];
        int i,j,k,t,len,sum,ss;
        scanf("%s",s);
        t=len=strlen(s);
        sum=ss=0;
        memset(a,0,sizeof(a));
       
        for(i=0;i<len;i++)
        {
            for(k=0,j=i+1;j<len;j++)
            {
                if(s[j]<s[i])
                k++;
            }
            a[--t]=k;
        }
        for(i=len-1;i>=0;i--)
        {
            ss=JC(i);
            sum+=a[i]*ss;
        }
        printf("%d\n",sum+1);
    }
    return 0;
}

组合数学之康拓展开:
公式描述:
把一个整数X展开成如下形式
X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,a为整数,并且0<=ai<i(1<=i<=n)。

应用:
求一个排列中在全排列中排第几:
例:
321是{1,2,3}全排列中第几个大的数

解析:

第一位是3,当第一位的数小于3时,那排列数小于321 如 123、 213 ,小于3的数有1、2 。所以有2*2!个。再看小于第二位2的:小于2的数只有一个就是1 ,所以有1*1!=1 所以小于321的{1,2,3}排列数有2*2!+1*1!=5个?

再举个例子:1324是{1,2,3,4}排列数中第几个大的数
第一位是1小于1的数没有,是0个 0*3! 第二位是3小于3的数有1和2,但1已经在第一位了,所以只有一个数2 1*2! 。第三位是2小于2的数是1,但1在第一位,所以?有0个数 0*1! ,所以比1324小的排列有0*3!+1*2!+0*1!=2个,1324是第三个大数。

转载于:https://www.cnblogs.com/xl1027515989/p/3241984.html

【ACM】nyoj_139_我排第几个_201308062046相关推荐

  1. 两年工作经验,离职了...

    Hi,大家好,我是3y 啊,好久没在csdn更新了- 当大家看到这篇文章的时候,我已经办完离职手续离开了蘑菇街.从19年初到蘑菇街实习,到现在不知不觉已经两年多了.两年时间说短不短,说长也不长. 之前 ...

  2. 康拓展开与逆康拓展开

    康托展开与逆康托展开   康托展开据我所理解,应该便是给你一个已知的排列,然后这个排列在全排列中是第几小或者第几大的,一般都是按字典序计算,即为第几小的.康托展开的公式为:X=a[n]*(n-1)!+ ...

  3. 网内计算:可编程数据平面和技术特定应用综述

    网内计算:可编程数据平面和技术特定应用综述 摘要--与云计算相比,边缘计算提供了更靠近终端设备的处理,降低了用户体验的延迟.最新的In-Network Computing范例采用可编程网络元素在数据达 ...

  4. ACM学习历程—HDU2068 RPG的错排(组合数学)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  5. 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 A: 排火车 - 题解

    题意: S u n n y Sunny Sunny之后接 C l o u d y Cloudy Cloudy, C l o u d y Cloudy Cloudy之后接 R a i n y Rainy ...

  6. 【转】[退役]纪念我的ACM——headacher@XDU

    转自:http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了,是时候总结一下我ACM的生涯了.虽然很舍不得,但这段回忆很值得纪念 ...

  7. 做acm 需要学的算法

    做acm 需要学的算法 转一个搞ACM需要的掌握的算法.  要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.  适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...

  8. acm经典题Mark

    著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...

  9. ZOJ 1025 Wooden Sticks(快排+贪心)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=25 题目大意:机器运送n个木条,每个木条有一个长度和重量.运送第一根木 ...

最新文章

  1. java 枚举 循环_java – 在枚举中实现内部接口时的循环继承
  2. 使sqoop能够启用压缩的一些配置
  3. 查看无线网卡工作模式
  4. 像证券交易员一样思考_2.理解绝招
  5. 不平衡数据的数据处理方法
  6. 【公司金融课堂学习笔记】1、企业融资—风险投资
  7. 北风设计模式课程---享元模式
  8. 什么是跨域?跨域如何解决
  9. 一篇英文文档中找出频数最多的10个单词
  10. 【README3】动态规划之“找零钱”说明最优子结构怎么解决
  11. 2021-10-28 python爬虫学习
  12. TypeScript学习(一):原始数据类型的定义
  13. java timer指定线程池_Java 定时器(Timer)及线程池里使用定时器实例代码
  14. break、continue
  15. kafka生产者集群和分区,消费者轮询接收
  16. 驭势领读 | 《让大象飞》:资本寒冬正好能让市场回归理性
  17. 湖北武汉劳务员考试建筑施工企业的劳务实名制建筑七大员考试
  18. 2018科大讯飞AI营销算法比赛笔记
  19. 机器学习笔记 (第一周)
  20. BroadcastRecever

热门文章

  1. linux安装mq报5724,小白提问:linux安装MQ出现的错误
  2. 多线程队列的算法优化
  3. java stream 分组求和_Java stream List 求和、分组操作
  4. Ubuntu根目录下各文件夹的功能详细介绍
  5. 视频光端机常见故障问题及处理方法大全
  6. 工业交换机的价格为什么有高低之分?
  7. 【渝粤教育】国家开放大学2018年秋季 0699-21T阅读与写作 参考试题
  8. 【渝粤题库】国家开放大学2021春1334纳税筹划题目
  9. mysql集群软件有哪些_浅谈数据库集群软件优缺点有哪些
  10. 【数字信号处理】分贝的概念及其日常使用中常见的错误