您的位置:首页 > 其它

康托展开(求该排列是第几大的) 模板

2016-05-06 11:09 211 查看
//注意:当阶乘的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 算法 康托展开