2015年2月9日 星期一

2015/02/09 Codeforces 513B. Permutations

// http://codeforces.com/problemset/problem/513/B1
// http://codeforces.com/problemset/problem/513/B2
#include <iostream>
#include <cstdio>

using namespace std;

typedef long long ll;

int N; ll M;
int Ans[60];

int main()
{
    scanf("%d %I64d", &N, &M);

    int st = 0, ed = N;

    for(int Ni = 1; Ni < N; Ni++)
    {
        if( 1LL<<N-1-Ni >= M )
        {
            Ans[st++] = Ni;
        }
        else
        {
            Ans[--ed] = Ni;
            M -= 1LL<<N-1-Ni;
        }

    }

    Ans[st++] = N;

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

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

沒有留言:

張貼留言