我排第几个
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
- 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
- 样例输出
-
1 302715242 260726926
- 来源
- [苗栋栋]原创
-
上传者
思路:之前是用next_permutation做的,超时了。然后看见讨论组里说是康托展开。。之前没看懂,刚才看了一个博客里的链接,说的很好。。
http://zh.wikipedia.org/zh/康托展开
my code:
#include<iostream> #include<string.h> using namespace std; int jiecheng(int n) { int i; int ji=1; for(i=1;i<=n;i++) ji=ji*i; return ji; } int main() { int T,i,j,len,count,sum; char a[13]; cin>>T; while(T--) { sum=1; cin>>a; len=strlen(a); for(i=0;i<len;i++) { count=0; for(j=i+1;j<len;j++) { if(a[i]>a[j]) { count++; } } sum=sum+count*jiecheng(len-i-1); } cout<<sum<<endl; } return 0; }
时间: 2024-12-08 10:02:32