我排第几个
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
- 样例输出
-
1 302715242 260726926
代码:
1 #include "stdio.h" //nyoj 139 我排第几个--康拓展开 2 #include "string.h" 3 4 #define N 15 5 6 long long A(int x) //求阶乘 7 { 8 long long ans = 1; 9 for(int i=1; i<=x; ++i) 10 ans = ans*i; 11 return ans; 12 } 13 14 int main() 15 { 16 int T; 17 int a[N]; 18 int num[N]; 19 char str[N]; 20 int i,j; 21 scanf("%d",&T); 22 getchar(); 23 while(T--) 24 { 25 scanf("%s",str); 26 int len = strlen(str); 27 for(i=0; i<len; ++i) 28 { 29 a[i] = str[i]-'a'+1; 30 num[i] = a[i]-1; 31 } 32 long long ans = 0; 33 for(i=0; i<len; ++i) 34 { 35 ans += num[i]*A(len-i-1); 36 for(j=0; j<len; ++j) 37 { 38 if(a[j]>a[i]) 39 num[j]--; 40 } 41 } 42 printf("%lld ",ans+1); 43 } 44 return 0; 45 }