nyoj 139——我排第几个|| nyoj 143——第几是谁? 康托展开与逆康托展开
讲解康托展开与逆康托展开。http://wenku.baidu.com/view/55ebccee4afe04a1b071deaf.html
#include<bits/stdc++.h>
using namespace std;
int fac[20];
int fun(){
fac[0]=1;
int i;
for(i=1;i<=12;i++){
fac[i]=fac[i-1]*i;
}
}
int main(){
int t,i,j,c,sum,num;
char str[15];
fun();
scanf("%d",&t);
while(t--){
scanf("%s",str);
sum=0;
for(i=0;i<12;i++){
num=0;
for(j=i+1;j<12;j++){
if(str[i]>str[j])
num++;
}
sum+=num*fac[12-i-1];
}
printf("%d\n",sum+1);
}
return 0;
}
//reverse
#include<bits/stdc++.h>
using namespace std;
int fac[20],num[20];
int fun(){
fac[0]=1;
int i;
for(i=1;i<=12;i++){
fac[i]=fac[i-1]*i;
}
}
int main(){
int t,i,j,b,c,sum,m;
fun();
scanf("%d",&t);
while(t--){
scanf("%d",&m);
m--;
for(i=0;i<13;i++){
num[i]=i;
}
for(i=0;i<12;i++){
b=m/fac[12-i-1];
printf("%c",num[b]+97);
for(j=b;j<12;j++){
num[j]=num[j+1];
}
m%=fac[12-i-1];
}printf("\n");
}
return 0;
}
学学学 练练练 刷刷刷

浙公网安备 33010602011771号