我排第几个
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
-
输入
-
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
- 输出一个整数m,占一行,m表示排列是第几位; 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
样例输出
-
1 302715242 260726926
-
#include <stdio.h> void fact(int a[]) // 求出阶乘 { for(int i = 2; i <= 11; i++) { a[i] = i*a[i-1]; } } int fun(char s[], int a[]) // 康拓展开定理 { int ret = 0; for(int i = 0; i <= 11; i++) { int count = 0; for(int j = i+1; j <= 11; j++) { if(s[i] > s[j]) count++; } ret += count*a[11 - i]; } return ret + 1; } int main() { int n; int a[12] = {0,1}; char s[15]; fact(a); scanf("%d",&n); while(n--) { scanf("%s",s); printf("%d\n",fun(s,a)); } }
-
第一行有一个整数n(0<n<=10000);