#include <bits/stdc++.h>
using namespace std;
int main(){
//init();
long long* fac=new long long[20];
fac[0]=fac[1]=1;
for(int i=2;i<=20;i++) fac[i]=fac[i-1]*i;
// for(int i=0;i<=20;i++) printf("fac[%lld]==%lld\n",i,fac[i]);
long long* num=new long long[10];
srand(time(0));
for(int i=1;i<=5;i++) num[i]=rand()%100;
sort(num+1,num+6);
do{
//cantor
printf("cantor:\n");
long long cantor=0;
for(int i=1;i<=5;i++){
long long temp=0;
for(int j=i+1;j<=5;j++){
if(num[j]<num[i]) temp++;
}
cantor+=temp*fac[5-i];
}
printf(">>");
for(int i=1;i<=5;i++){
printf("%lld ",num[i]);
}
printf("\n");
printf("#it's cantor == %lld\n",cantor);
//_cantor
printf("_cantor:\n");
vector<long long> vec;
for(int i=1;i<=5;i++) vec.push_back(num[i]);
sort(vec.begin(),vec.end());
printf(">>");
for(int i=5;i>=1;i--){
long long rest=cantor%fac[i-1];
long long arr=cantor/fac[i-1];
cantor=rest;
printf("%lld ",vec[arr]);
vec.erase(vec.begin()+arr);
}
printf("\n");
}while(next_permutation(num+1,num+5));
}
(蒟蒻笔记,大神勿喷)