第几是谁?

来源:互联网 发布:美图秀秀批处理mac版 编辑:程序博客网 时间:2024/06/11 22:02

第几是谁?

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
现在有"abcdefghijkl”12个字符,将其按字典序排列,如果给出任意一种排列,我们能说出这个排列在所有的排列中是第几小的。但是现在我们给出它是第几小,需要你求出它所代表的序列.
输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个整数m,它代表着序列的第几小;
输出

输出一个序列,占一行,代表着第m小的序列。



直接上康拓逆展开式


#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long f[12]={1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800};char s[13]={"abcdefghijkl"},str[13];void A(int sum){    sum--;    int i,j,vis[12];    memset(vis,0,sizeof(vis));    for(i=0;i<12;i++)    {        long long a=sum/f[12-i-1];        for(j=0;j<12;j++)        {            if(!vis[j])            {                if(a==0) break;                a--;            }        }        str[i]=s[j];        vis[j]=1;        sum=sum%f[12-i-1];    }}int main(){    long long n,m;    scanf("%lld",&n);    while(n--)    {        scanf("%lld",&m);        A(m);        printf("%s\n",str);    }    return 0;}


样例输入
31302715242260726926
样例输出
abcdefghijklhgebkflacdjigfkedhjblcia
0 0