您的位置:首页 > 其它

nyoj 139 我排第几个(康托展开)

2017-03-30 07:28 246 查看


ps:康托展开基础知识

代码:

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

typedef long long LL;
LL factory[15];

void init()
{
factory[0]=1,factory[1]=1;
for(int i=2; i<15; ++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+1;
}

int main()
{

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