Cod sursa(job #3135006)

Utilizator Catalin12Cata Caraulasu Catalin12 Data 1 iunie 2023 13:39:00
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include<fstream>

using namespace std;

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

long long val[31];

void Init(int n) /// calculez numarul total de arbori de cautare pentru fiecare numar de noduri
{
    val[0]=1;
    val[1]=1;
    for(int i=2; i<=n; i++)
        for(int j=1; j<=i; j++)
            val[i]+=val[j-1]*val[i-j];


}

void calculare(int stanga, int dreapta, long long k) /// construiesc al K-lea arborele  binar de căutare  în ordine lexicografică
{
    int nod;
    if(stanga>dreapta)
        return;

    for(int i=stanga; i<=dreapta ; ++i) /// alegem radacina in functie de k
    {

        if(val[i-stanga]*val[dreapta-i]>k)
        {
            nod=i;
            break;
        }
        k-=val[i-stanga]*val[dreapta-i];
        nod=i;
    }

    out<<nod<<" ";

    if(nod>stanga) ///construim subarborele stang
        calculare(stanga, nod-1, k/val[dreapta-nod]);
    if(nod<dreapta) /// construim subarborele drept
        calculare(nod+1, dreapta, k%val[dreapta-nod]);
}

int main()
{
    int n;
    long long k;
    in>>n>>k;
    Init(n);
//    for(int i=0;i<=30;i++)
//        cout<<val[i]<<" ";
//        cout<<endl;
    calculare(1,n,k-1);

}