Cod sursa(job #607954)

Utilizator SpiderManSimoiu Robert SpiderMan Data 14 august 2011 00:12:20
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
# include <cstdio>

typedef long long ll;
const char *FIN = "planeta.in", *FOU = "planeta.out";
const int MAX = 31;

int N;
ll K, ST[MAX];

void back (int st, int dr, ll k) {
    int i;
    for (i = st; ST[i - st] * ST[dr - i] <= k && i <= dr; ++i)
        k -= ST[i - st] * ST[dr - i];
    printf ("%d ", i);
    if (st < i) back (st, i - 1, k / ST[dr - i]);
    if (i < dr) back (i + 1, dr, k % ST[dr - i]);
}

int main (void) {
    fscanf (fopen (FIN, "r"), "%d %lld", &N, &K);

    ST[0] = 1;
    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= i; ++j)
            ST[i] += ST[i - j] * ST[j - 1];

    freopen (FOU, "w", stdout);
    back (1, N, --K);
}