Pagini recente » Cod sursa (job #124460) | Cod sursa (job #1712141) | Cod sursa (job #1043111) | Cod sursa (job #1138526) | Cod sursa (job #1583334)
#include <fstream>
using namespace std;
long long n,k,i,d[31][31][31],s[31][31];
ifstream fin ("planeta.in");
ofstream fout ("planeta.out");
void dinamica()
{
int i,j,l;
for (i=1;i<=n;i++)
{
d[i][i][i]=1;
s[i][i]=s[i][i-1]=1;
}
s[n+1][n]=1;
for (l=2;l<=n;l++)
{
for (i=1;i<=n-l+1;i++)
for (j=i;j<=i+l-1;j++)
{
d[i][i+l-1][j]=s[i][j-1]*s[j+1][i+l-1];
s[i][i+l-1]+=d[i][i+l-1][j];
}
}
}
void FindRoot(int a,int b,long long k)
{
int i,ad=0;
for (i=a;ad+d[a][b][i]<k&&i<b;i++)
ad+=d[a][b][i];
fout<<i<<" ";
if (a<=i-1) FindRoot(a,i-1,(k-ad)/s[i+1][b]);
if (i+1<=b) FindRoot(i+1,b,(k-ad)%s[i+1][b]);
}
int main()
{
fin>>n>>k;
dinamica();
FindRoot(1,n,k);
fin.close();
fout.close();
return 0;
}