Cod sursa(job #1723463)

Utilizator akaprosAna Kapros akapros Data 30 iunie 2016 18:18:41
Problema Planeta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define maxN 32
#define ll long long
using namespace std;
int n;
ll k, dp[maxN];
void read()
{
    freopen("planeta.in", "r", stdin);
    freopen("planeta.out", "w", stdout);
    scanf("%d %lld", &n, &k);
}
void solve()
{
    int i, j;
    dp[1] = dp[0] = 1;
    for (i = 2; i <= n; ++ i)
        for (j = 0; j < i; ++ j)
            dp[i] += 1LL * dp[j] * dp[i - j - 1];
}
void write(int l, int r, ll k)
{
    int i = l;
    if (l == r)
    {
        printf("%d ", i);
        return ;
    }
    for (; dp[i - l] * dp[r - i] <= k && i <= r; ++ i)
    {
        k -= dp[i - l] * dp[r - i];
        if (i == r)
            break;
    }
    //-- i;
    printf("%d ", i);
    if (l < i)
        write(l, i - 1, k / dp[r - i]);
    if (r > i)
        write(i + 1, r, k % dp[r - i]);
}
int main()
{
    read();
    solve();
    write(1, n, k);
    return 0;
}