我排第几个(康托展开)
我排第几个
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
- 样例输出
-
1 302715242 260726926
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 long long fac(long long x) 5 { 6 if(x==1) 7 return 1; 8 return x*fac(x-1); 9 } 10 int main() 11 { 12 int n; 13 char a[13]; 14 int i,j; 15 //freopen("int.txt","r",stdin); 16 cin>>n; 17 getchar(); 18 while(n--) 19 { 20 cin>>a; 21 long long temp=0,num=0; 22 for(i=0;i<11;i++) 23 { 24 temp=0; 25 for(j=i+1;j<12;j++) 26 { 27 if(a[j]<a[i]) 28 temp++; 29 } 30 num+=fac(12-i-1)*temp; 31 } 32 cout<<num+1<<endl; 33 } 34 35 }