Cod sursa(job #357347)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 18 octombrie 2009 21:47:41
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>

int n, a[40], t;
long long v[40], k;
	
void solve (int l, int r, long long k)
{
	int x=r-l+1, p=0, i;
	long long s=0, j;
	if (l<=r)
	{
		for (i=1; i<=x; i++) 
		{
			s+=v[i-1]*v[x-i];
			if (k<=s) 
			{
				s-=v[i-1]*v[x-i];
				p=i;
				break;
			}
		}
		if (k>s) k-=s;
		j=v[r-(l+p-1)];
		long long c=k/j;
		long long d=k-c*j;
		if (k%j>0) c++; else d+=j;
		t++;
		a[t]=l-1+p;
		solve(l,l+p-2,c);
		solve(l+p,r,d);
	}
}
	

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