Cod sursa(job #2899274)

Utilizator Cosmina_GheorgheGheorghe Cosmina Cosmina_Gheorghe Data 8 mai 2022 13:31:09
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("planeta.in");
ofstream fout("planeta.out");
long long t[32];
void catalan(int n)
{
    t[0]=1;
    t[1]=1;
    for(int i=2;i<=n;i++)
    {
        for( int j=0;j<i;j++)
        {
            t[i]+=t[j]*t[i-j-1];
        }
        cout<<t[i];
    }
}
void gasire(int inceput, int nrnoduri, long long K)
{
    ///daca nu are noduri st/dr
    if(nrnoduri==0)
    {
        return;
    }
    ///daca mai are doar un nod
    if(nrnoduri==1)
    {
        fout<<inceput+1<<" ";
        return;
    }
    for(int i=1;i<=nrnoduri;i++)
    {
        long long nrperm=t[i-1]*t[nrnoduri-i];
        if(nrperm<K)
        {
            K=K-nrperm;
        }
        else
        {
            ///afisare radacina
            fout<<inceput+i<<" ";
            ///stanga
            gasire(inceput,i-1,(K-1)/t[nrnoduri-i]+1);
            ///dreapta
            gasire(inceput+i,nrnoduri-i,(K-1)%t[nrnoduri-i]+1); //ce ramane dupa traversare stanga
            return;
        }
    }
}
int main()
{
    int n;
    long long k;
    fin>>n>>k;
    //generare numar de permutari pt n noduri https://www.youtube.com/watch?v=YDf982Lb84o
    catalan(n);
    gasire(0,n,k);
    return 0;
}