Cod sursa(job #2899200)

Utilizator neagamariaMaria Neaga-Budoiu neagamaria Data 8 mai 2022 10:27:55
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n;
long long k, v[31];

void generare()
{
    v[0]=v[1]=1;
    //v[i] = nr de arbori binari de cautare cu i noduri (nr catalan)
    for(int i=2; i<=n; i++)
    {
        for (int j=1; j<=i; j++)
        {
            v[i]+=v[j-1]*v[i-j]; //nr arbori st * nr arbori dr
        }
    }
}

void parcurgere(int st, int dr, long long k)
{
    long long ramas;
    int dif;

    //aflu radacina
    int rad;
    for(rad=st; rad<=dr && k>v[rad-st]*v[dr-rad]; rad++)
    {
        k-=v[rad-st]*v[dr-rad];
    }

    //afisare radacina
    out<<rad<<" ";

    //parcurgere arbore st
    if(rad>st)
        parcurgere(st, rad-1,  1+(k-1)/v[dr-rad]);

    ramas=k%v[dr-rad];
    if (ramas==0)
        ramas=v[dr-rad];

    //parcurgere arbore dr
    if(rad<dr)
        parcurgere(rad+1, dr, ramas);
}

int main()
{
    in>>n>>k;
    generare();
    parcurgere(1, n, k);

    return 0;
}