Pagini recente » Cod sursa (job #617755) | Cod sursa (job #925885) | Cod sursa (job #1030401) | Cod sursa (job #2247720) | Cod sursa (job #2212622)
#include <cstdio>
using namespace std;
FILE *fin=fopen ("planeta.in","r");
FILE *fout=fopen ("planeta.out","w");
long long d[31];
void af (long long k,int n,int start){
int i,r;
long long sum=0;
//printf ("%lld %d %d\n",k,n,start);
if (n<=0 || k<=0)
return;
for (i=1;i<=n && sum<k;i++)
sum+=d[i-1]*d[n-i];
r=i-1;
sum=sum-d[i-2]*d[n-i+1];
k-=sum;
fprintf (fout,"%d ",start+r-1);
//if (start+r-1==15)
// printf ("a");
af (k/d[n-r] + (k%d[n-r]!=0),r-1,start);
if (k%d[n-r]==0)
af(d[n-r],n-r,start+r);
else
af (k%d[n-r],n-r,start+r);
}
int main()
{
int n,i,j;
long long k;
fscanf (fin,"%d%lld",&n,&k);
d[0]=1;
// d[i] = cati arb de caut cu i noduri
for (i=1;i<=n;i++){
for (j=1;j<=i;j++)
d[i]=d[i]+ d[j-1]*d[i-j];
}
af (k,n,1);
return 0;
}