//注意:当阶乘的n - 1超过12就要用long long
//接口:kangtuo(s,n) s为排好的一种排列方式,返回值为这种排列是第几大的(从1开始)
long long fac[20];
void init(int n)
{
fac[0] = 1;
long long result = 1;
for(int i = 1;i <n; i ++)
{
result = result * i;
fac[i] = result;
}
}
long long kangtuo(char s[],int n)
{
init(n);
long long result = 0;
int t;
for(int i = 0;i < n; i ++)
{
t = 0;
for(int j = i + 1; j < n; j ++)
{
if(s[j] < s[i])
{
t ++;
}
}
result = result + t * fac[n - 1 - i];
}
return result + 1;
}
康托展开(求该排列是第几大的) 模板
最新推荐文章于 2024-10-17 11:39:06 发布