我排第几个(康托展开)

我排第几个

时间限制: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 }

 

posted @ 2015-07-31 18:23  御心飞行  阅读(220)  评论(0编辑  收藏  举报