Pagini recente » Cod sursa (job #1977845) | Cod sursa (job #2373107) | Cod sursa (job #2564817) | Cod sursa (job #2778424) | Cod sursa (job #2899200)
#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;
}