我排第几个 http://acm.nyist.net/JudgeOnline/problem.php?pid=139
我排第几个
时间限制: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 fun(int k) { int i,jie=1; for(i=1;i<=k;i++) jie=jie*i; return jie; } int main() { int n; scanf("%d",&n); while(n--) { char a[15]; int i,j,count,sum=1,m; scanf("%s",a); for(i=0;i<12;i++) { count=fun(11-i); m=0; for(j=0;j<i;j++) { if(a[i]>a[j]) m++; } sum+=(a[i]-'a'-m)*count; } printf("%d\n",sum); } return 0; }
此题其实就是排列问题,所以用到阶乘。注意阶乘是12-1-i;为什么会有-1呢?因为你算的是已经排好一个了,还剩下那么多。