Pagini recente » Cod sursa (job #12378) | Cod sursa (job #618427) | Cod sursa (job #1917947) | Cod sursa (job #2658463) | Cod sursa (job #545217)
Cod sursa(job #545217)
#include <fstream>
using namespace std;
const char InFile[]="planeta.in";
const char OutFile[]="planeta.out";
ifstream fin(InFile);
ofstream fout(OutFile);
long long N,K,D[32];
void arbore(int st,int dr,long long K)
{
if(st>dr)
{
return;
}
if(st==dr)
{
fout<<st<<" ";
return;
}
int r=0;
long long sum=0;
for(r=st;r<=dr;++r)
{
long long x=D[r-st]*D[dr-r];
sum+=x;
if(sum>=K)
{
sum-=x;
break;
}
}
fout<<r<<" ";
//*
long long cat=(K-sum-1)/D[dr-r]+1;
long long rest=(K-sum-1)%D[dr-r]+1;
/*/
long long cat=(K-sum)/D[dr-r];
long long rest=(K-sum)%D[dr-r];
if(rest==0)
{
rest=D[dr-r];
}
else
{
++cat;
}
//*/
arbore(st,r-1,cat);
arbore(r+1,dr,rest);
}
int main()
{
fin>>N>>K;
fin.close();
D[0]=1;
D[1]=1;
for(register int i=2;i<=N;++i)
{
for(register int j=1;j<=i;++j)
{
D[i]+=D[j-1]*D[i-j];
}
}
arbore(1,N,K);
fout.close();
return 0;
}