Cod sursa(job #1536611)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 26 noiembrie 2015 14:10:43
Problema Planeta Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

#define DIM 32
using namespace std;

unsigned long long D[DIM], K; int N;

void getTree (int N, unsigned long long K, int val) {
    unsigned long long S = 0;
    for (int x = 1; x <= N; x ++) {
        if (S + D[x-1] * 1LL * D[N-x] < K)
            S += D[x-1] * 1LL * D[N-x];
        else {
            printf ("%d ", x + val);

            getTree (x-1, (K-S) / D[N-x], val + 0);
            getTree (N-x, (K-S) % D[N-x], val + x);
            break;
        }
    }
    return;
}

int main () {

    freopen ("planeta.in" ,"r", stdin );
    freopen ("planeta.out","w", stdout);

    scanf ("%d %lld", &N, &K);
    D[0] = D[1] = 1;

    for (int i = 2; i <= N; i ++)
        for (int x = 1; x <= i; x ++)
            D[i] += D[x-1] * 1LL * D[i-x];

    getTree (N, K, 0);

    return 0;
}