Pagini recente » Monitorul de evaluare | Istoria paginii runda/a-b-c-d/clasament | Cod sursa (job #1665366) | Cod sursa (job #1346945) | Cod sursa (job #430843)
Cod sursa(job #430843)
#include<stdio.h>
FILE *f=fopen("planeta.in","r");
FILE *g=fopen("planeta.out","w");
int n,j,i;
long long k,c[31];
void rec(int p, int u,int k){
int i,r;
long long s=0,t1,t2;
for(i=p;i<=u&&s<k;i++)
s+=c[i-p]*c[u-i];
r=i-1;
s-=c[r-p]*c[u-r];
k=k-s;
t1=k/c[u-r]+1;
if(k%c[u-r]!=0)
t2=k%c[u-r];
else{
t1--;
t2=c[u-r];
}
fprintf(g,"%d ",r);
if(p<=r-1&&r>0)
rec(p,r-1,t1);
if(r+1<=u)
rec(r+1,u,t2);
}
int main(){
fscanf(f,"%d%lld",&n,&k);
c[0]=1;
c[1]=1;
for(i=2;i<=n;i++)
for(j=0;j<i;j++)
c[i]+=c[j]*c[i-1-j];
rec(1,n,k);
return 0;
}