康托展开
来源:互联网 发布:数据帧格式是什么 编辑:程序博客网 时间:2024/05/05 15:30
/*康托展开给定一个字符串,问这是字典序中的第几小*/#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int p[15];void fac() //求前k项的阶乘{ p[0] = 1; p[1] = 1; for(int i = 2;i < 25; i++) { p[i] = i * p[i-1]; }}int kangtuo(char *s) //康托展开{ int len = strlen(s); int i,j,count,sum = 1; for(i = 0 ; i < len ; i++) { count=0; for(j = i + 1 ; j < len ; j++) { if(s[i] > s[j]) count++; } sum += count * p[len-1-i]; } return sum;}int main(){ int n; char a[20]; fac(); scanf("%d",&n); while(n--) { scanf("%s",a); printf("%d\n",kangtuo(a)); } return 0;}