Cod sursa(job #330140)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 8 iulie 2009 22:06:40
Problema Planeta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

#define file_in "planeta.in"
#define file_out "planeta.out"

#define Nmax 31

int n;
long long C[Nmax],k;

void solve(int ls, int ld, long long val)
{
	int i,ok,x;
	if (ls>ld)
		return ; 
    if (ls==ld)
	{
		printf("%d ", ls);
		return ;
	}
	
	ok=0;
	x=0;
	for (i=ls;i<=ld && !ok;++i)
		 if (x+C[i-ls]*C[ld-i]*val<k)
			 x+=C[i-ls]*C[ld-i]*val;
		 else
			 ok=1;
	printf("%d ", i-1);
	solve(ls,i-2,val*C[ld-i+1]);
	solve(i,ld,val);
}
	
int main()
{
	int i,j,t;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %lld", &n,&k);
	
	//catalan
	C[0]=1;
	for (i=1;i<=n;++i)
	{
		t=0;
		for (j=0;j<i;++j)
			t+=C[j]*C[i-1-j];
		C[i]=t;
	}
	
	/*for (i=1;i<=n;++i)
		 printf("%d ", C[i]);*/
	solve(1,n,1);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}