Cod sursa(job #465089)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 23 iunie 2010 12:06:00
Problema Planeta Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
// de mod lld
#include<stdio.h>
#define ll long long

ll p[53],k;
int n;

void rec(int nod,ll k,int val)
{
	int i;
	if(!k || !nod)
		return ;
	for(i=1;i<=nod;i++)
		if(k>p[i-1]*p[nod-i])
			k-=p[i-1]*p[nod-i];
		else
			break;
	printf("%d ",i+val);	
	rec(i-1,k/p[nod-i],val);
	
	int rest=k%p[nod-i];
	if (rest==0) rest=p[nod-i];
	rec(nod-i,rest,val+i);
}

int main ()
{
	int i,j;
	freopen("planeta.in","r",stdin);
	freopen("planeta.out","w",stdout);
	scanf("%d%lld",&n,&k);
	p[0]=1;p[1]=1;
	for(i=2;i<=n;i++)
		for(j=1;j<=i;j++)
			p[i]+=p[j-1]*p[i-j];
	rec(n,k,0);
	return 0;
}