康托展开:求一个 1 ~ n 的排列的排名,如 1....n 的排名为1
表示小于当前位置的数的个数。
// 给定排列 求名次
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10 + 7;
typedef long long ll;
int a[maxn];
int cator(int *a) // 计算排列 a 的名次
{
ll ans = 0;
for(int i = 1; i <= 5; i++) {
ll cnt = 0, sum = 1, num = 1;
for(int j = i + 1; j <= 5; j++) {
if(a[i] > a[j]) cnt++;
sum *= num;
num++;
}
ans = (ans + cnt * sum);
}
cout << ans + 1 << endl;
return 0;
}
int main()
{
int n;
for(int i = 1; i <= 5; i&#