Cod sursa(job #2899006)

Utilizator kanyjmkSabau Eduard kanyjmk Data 7 mai 2022 15:19:07
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("planeta.in");
ofstream fout("planeta.out");
vector <long long> create_catalan(int n)
{
    vector <long long> catalan(n+1);
    catalan[0] = catalan[1] = 1;
    for(int i = 2; i <= n; i++)
        {
            catalan[i] = 0;
            for(int j = 0; j < i; j++)
                catalan[i] += catalan[j] * catalan[i-j-1];
        }
    return catalan;
}
void find_preorder(int s, int f, long long k, vector<long long>& catalan)
{
    int root;
    for(root = s; root < f; ++root)
    {
        long long num_trees = catalan[root - s] * catalan[f - root];
        if(num_trees <= k)
            k -= num_trees;
        else break;
    }
    fout << root << " ";
    if(root > s)
        find_preorder(s, root-1, k / catalan[f - root], catalan);
    if(root < f)
        find_preorder(root+1, f, k % catalan[f - root], catalan);

}
int main()
{
    int n;
    long long k;
    fin >> n >> k;
    vector <long long> catalan = create_catalan(n);
    find_preorder(1, n, k-1, catalan);

}