Cod sursa(job #2022472)

Utilizator giotoPopescu Ioan gioto Data 16 septembrie 2017 16:50:28
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>
using namespace std;

int n;
long long d[32];
long long k;
inline void rec(int st, int dr, long long k){
    int TT = st;
    while(d[TT - st] * d[dr - TT] <= k){
        k = k - d[TT - st] * d[dr - TT];
        ++TT;
    }
    printf("%d ", TT);
    if(TT > st) rec(st, TT - 1, k / d[dr - TT]);
    if(TT < dr) rec(TT + 1, dr, k % d[dr - TT]);
}
int main()
{
    freopen("planeta.in", "r", stdin);
    freopen("planeta.out", "w", stdout);
    scanf("%d", &n);
    scanf("%lld", &k);
    d[0] = d[1] = 1;
    for(int i = 2; i <= n ; ++i){
        for(int j = 0; j < i ; ++j)
            d[i] = d[i] + d[j] * d[i - j - 1];
    }
    rec(1, n, k - 1);
    return 0;
}