qduoj 排在第几个

来源:互联网 发布:淘宝win10激活码分享 编辑:程序博客网 时间:2024/04/27 13:59

排在第几个

发布时间: 2015年10月10日 18:05   时间限制: 1000ms   内存限制: 256M

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

每行输入一行字符串,保证是a~l这12个字符的某种排列 EOF结束

输出一个整数,代表这个排列排在第几位

 复制
abcdefghijklabcdefghikljgfkedhjblcia
14260726926

康托展开


#include<stdio.h>int main(){int i,fac[20],a[20],j,num,ans;char ch[20];fac[0]=1;for(i=1;i<12;i++){fac[i]=fac[i-1]*i;}while(scanf("%s",ch)!=EOF){ans=0;for(i=0;i<12;i++)a[i]=ch[i]-'a';for(i=0;i<12;i++){num=0;for(j=i+1;j<12;j++){if(a[j]<a[i])num++;}ans+=num*fac[11-i];}printf("%d\n",ans+1);}}





0 0