2015年3月16日 星期一

2015/03/16 TIOJ 1048 . D.亞洲經濟合作會議

// http://tioj.ck.tp.edu.tw/problems/1048
#include <algorithm>
#include <iostream>
#include <cstdio>

using namespace std;

typedef long long ll;

ll N, M;
bool use[30];

ll fac[20];
int Ans[20];

int main()
{
    fac[0] = 1;

    for(int i = 1; i <= 12; i++)
        fac[i] = fac[i-1]*i;

    while( scanf("%lld %lld", &N, &M) )
    {
        if( !N && !M ) break;
        M = (M-1)%fac[N]+1;

        ll now = 0;
        fill(use, use+30, false);

        for(int Ni = 0; Ni < N; Ni++)
        {
            int cnt = 1;

            while( now+fac[N-1-Ni] < M )
            {
                now += fac[N-1-Ni];
                cnt++;
            }

            for(int Nj = 0; Nj < N; Nj++)
            {
                if( !use[Nj] ) cnt--;
                if( !cnt )
                {
                    Ans[Ni] = Nj;
                    use[Nj] = true;
                    break;
                }
            }
        }

        for(int Ni = 0; Ni < N; Ni++)
        {
            printf("%c", 'A'+Ans[Ni]);

            if( Ni != N-1 ) printf(" ");
            else puts("");
        }

    }
}

沒有留言:

張貼留言