Cod sursa(job #545216)

Utilizator ChallengeMurtaza Alexandru Challenge Data 2 martie 2011 21:42:50
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream> 

using namespace std;

const char InFile[]="planeta.in";
const char OutFile[]="planeta.out";

ifstream fin(InFile);
ofstream fout(OutFile);

long long N,K,D[32];

void arbore(int st,int dr,long long K)
{
	if(st>dr)
	{
		return;
	}
	if(st==dr)
	{
		fout<<st<<" ";
		return;
	}
	int r=0;
	long long sum=0;
	for(r=st;r<=dr;++r)
	{
		long long x=D[r-st]*D[dr-r];
		sum+=x;
		if(sum>=K)
		{
			sum-=x;
			break;
		}
	}
	fout<<r<<" ";
	/*
	long long cat=(K-sum-1)/D[dr-r]+1;
	long long rest=(K-sum-1)%D[dr-r]+1;
	/*/
	long long cat=(K-sum)/D[dr-r];
	long long rest=(K-sum)%D[dr-r];
	if(rest==0)
	{
		rest=D[dr-r];
	}
	else
	{
		++cat;
	}
	//*
	arbore(st,r-1,cat);
	arbore(r+1,dr,rest);
}

int main()
{
	fin>>N>>K;
	fin.close();
	
	D[0]=1;
	D[1]=1;
	for(register int i=2;i<=N;++i)
	{
		for(register int j=1;j<=i;++j)
		{
			D[i]+=D[j-1]*D[i-j];
		}
	}

	arbore(1,N,K);
	
	fout.close();
	return 0;
}