我排第几个

来源:互联网 发布:沈阳思迅软件 编辑:程序博客网 时间:2024/04/27 20:29

我排第几个

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?

输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3abcdefghijklhgebkflacdjigfkedhjblcia
样例输出
1302715242260726926
来源
[苗栋栋]原创
上传者

苗栋栋

思路:之前是用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;}

0 0
原创粉丝点击