标签:
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
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; }
标签:
原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/44923999