Cod sursa(job #2749833)

Utilizator faalaviaFlavia Podariu faalavia Data 8 mai 2021 14:38:23
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("planeta.in");
ofstream fout("planeta.out");

unsigned short n;
long long k;
long long dp[32];

void nrBST(int x)
{
    dp[0] = 1;
    for(int i = 1; i <= x; ++i)
        for(int j = 1; j <= i; ++j)
           dp[i] += dp[j-1]*dp[i-j];   // dp[x] =  nr de BST cu x noduri
}

void findPerm(short start, short n, long long k)
{
    cout << k << " ";
    if(n == 0)
       return;

    if(n == 1)
    {
       fout << start + 1<<" ";
       return;
    }

    for(int i = 1 ; i <= n; i++)
    {   if(dp[i-1]*dp[n-i] >= k)
        {
           fout << start + i<<" ";
           findPerm(start, i-1, (k-1)/dp[n-i] + 1);
           findPerm(start+i, n-i, (k-1)%dp[n-i] + 1);
           return;
        }
       k -= dp[i-1]*dp[n-i];
    }
}

int main()
{
  fin>>n>>k;
  nrBST(n);
  findPerm(0,n,k);

    return 0;
}