Cod sursa(job #2623487)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 3 iunie 2020 12:01:16
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda simulare_oni_11-12... Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("planeta.in");
ofstream fout("planeta.out");

#define int long long

const int DIM = 33;

int dp[DIM][DIM];
int cnt[DIM];

void solve(int n, int k, int add = 0)
{
    if(n == 0)
        return ;

    if(n == 1)
    {
        fout << add + 1 << ' ';
        return ;
    }

    for(int i = 1; i <= n; ++i)
    {
        if(dp[n][i] < k)
        {
            k -= dp[n][i];
            continue;
        }

        fout << i + add << ' ';
        solve(i - 1, (k - 1) / cnt[n - i] + 1, add);
        solve(n - i, (k - 1) % cnt[n - i] + 1, add + i);
        return ;
    }
}

main()
{
    int n, k;
    fin >> n >> k;

    dp[0][0] = 1;
    cnt[0] = 1;

    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= i; ++j)
        {
            dp[i][j] = cnt[i - j] * cnt[j - 1];
            cnt[i] += dp[i][j];
        }

    solve(n, k);
}