Cod sursa(job #254118)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 6 februarie 2009 20:10:21
Problema Planeta Scor Ascuns
Compilator cpp Status done
Runda Marime 0.79 kb
#include <cstdio>

using namespace std;

#define LL long long
#define MAXN 32

int N, M;
LL num[MAXN];

void reconstruct(int N, int M, int begin)
{
    if (N == 0)
        return;

    int root = 1; 
    for (; num[root - 1] * num[N - root] <= M; root++)
        M -= num[root - 1] * num[N - root];

    printf("%d ", begin + root - 1);
    reconstruct(root - 1, M / num[N - root], begin);
    reconstruct(N - root, M % num[N - root], begin + root);
}

int main()
{
    freopen("planeta.in", "rt", stdin);
    freopen("planeta.out", "wt", stdout);

    scanf("%d %d", &N, &M);
    num[0] = 1;
    for (int i = 1; i <= N; i++)
    {
        num[i] = 0;
        for (int j = 1; j <= i; j++)
            num[i] += num[j - 1] * num[i - j];
    }

    reconstruct(N, M - 1, 1);
    printf("\n");

    return 0;
}