Cod sursa(job #289977)

Utilizator AndreyPAndrei Poenaru AndreyP Data 27 martie 2009 11:42:14
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<stdio.h>
#define ll long long
#define N 35
int n;
ll k;
ll cate[N];
inline void precalc()
{
	cate[0]=1;
	for(int i=1; i<=n; ++i)
	{
		for(int j=0; j<i; ++j)
			cate[i]+=cate[j]*cate[i-j-1];
	}
}
void rezolva(int n,ll k,int inc)
{
	if(!n)
		return;
	int cine=0;
	for(; cate[cine]*cate[n-cine-1]<=k; ++cine)
		k-=cate[cine]*cate[n-cine-1];
	printf("%d ",inc+cine);
	rezolva(cine,k/cate[n-cine-1],inc);
	rezolva(n-cine-1,k%cate[n-cine-1],inc+cine+1);
}
int main()
{
	freopen("planeta.in","r",stdin);
	freopen("planeta.out","w",stdout);
	scanf("%d%lld",&n,&k);
	precalc();
	rezolva(n,k-1,1);
	printf("\n");
	return 0;
}