Pagini recente » Cod sursa (job #520788) | Cod sursa (job #1785122) | Cod sursa (job #2054947) | Cod sursa (job #696447) | Cod sursa (job #254545)
Cod sursa(job #254545)
#include<stdio.h>
#define tip unsigned long long
tip n,k,i,j,arb[32],sol[32],real[32],poz,ret,getpoz(),getval(),lsol,val,h,p,s,nn;
void readd(),calc_arb(int ii),solve(),prints();
int main()
{
readd();
solve();
prints();
return 0;
}
void readd()
{
freopen("planeta.in","r",stdin);
freopen("planeta.out","w",stdout);
scanf("%llu%llu",&n,&k);nn=n,arb[0]=1;
for(i=1;i<=n;i++)real[i]=i;
}
void calc_arb(tip ii)
{
for(j=0;j<ii;j++)arb[ii]+=arb[j]*arb[ii-j-1];
}
void solve()
{
for(i=1;;i++){calc_arb(i);if(arb[i]>k)break;}
while(n>i){poz=1;val=getval();sol[++lsol]=val;n--;}
while(n)
{ poz=getpoz();
val=getval();
sol[++lsol]=val;
n--;
}
}
tip getpoz()
{
if(arb[n-1]>k)return 1;
s=0;for(j=0,h=n-1;j<n;j++,h--){s+=arb[j]*arb[h];if(s>k)break;}
ret=j+1;p=j;s-=arb[j]*arb[h];k-=s;
return ret;
}
tip getval()
{
ret=real[poz];for(j=poz;j<=n;j++)real[j]=real[j+1];return ret;
}
void prints()
{
for(i=1;i<=nn;i++)printf("%llu ",sol[i]);
printf("\n");
}