码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj 139——我排第几个|| nyoj 143——第几是谁? 康托展开与逆康托展开

时间:2015-07-19 19:32:44      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

讲解康托展开与逆康托展开。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;
}

  

nyoj 139——我排第几个|| nyoj 143——第几是谁? 康托展开与逆康托展开

标签:

原文地址:http://www.cnblogs.com/chengsheng/p/4659095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!