您的位置:首页 > 其它

2017蓝桥杯模拟题 排列序数(康托展开)

2017-03-30 07:44 176 查看


ps:基本的康托展开

代码:

#include<stdio.h>
#include<string.h>

typedef long long LL;
LL factory[20];

void init()
{
factory[0]=1,factory[1]=1;
for(int i=2; i<18; ++i)
factory[i]=i*factory[i-1];
}

LL Contor(char str[],int n)
{
LL ans=0;
for(int i=0; i<n; ++i)
{
LL cnt=0;
for(int j=i+1; j<n; ++j)
if(str[j]<str[i])
cnt++;
ans+=cnt*factory[n-i-1];
}
return ans;
}

int main()
{
init();
char
4000
s[20];
scanf("%s",s);
printf("%lld\n",Contor(s,strlen(s)));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: