Cod sursa(job #263283)

Utilizator katakunaCazacu Alexandru katakuna Data 20 februarie 2009 08:41:04
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

long long d[64],n,k,i,r;

FILE *g = fopen("planeta.out","w");

void reconst(long long st,long long dr,long long k){
	long long s = 0,r;

	if(st > dr)
		return ;
	
	if(st == dr){
		fprintf(g,"%lld ",st);
		return ;
	}	
	
	for(r=st; r<=dr; r++){
		s+=d[r-st] * d[dr-r];
		if(s >= k){
			s-=d[r-st] * d[dr-r];
			break;
		}
	}
	
	fprintf(g,"%lld ",r);
	
	reconst(st, r-1, (k-s - 1) / d[dr - r] + 1);
	reconst(r+1, dr, (k-s - 1) % d[dr - r] + 1);
	
}


int main(){

	FILE *f = fopen("planeta.in","r");
	
	fscanf(f,"%lld %lld",&n,&k);
	
	d[0] = 1;
	for(i=1; i<=n; i++)
		for(r=1; r<=n; r++)
			d[i]+= d[r-1] * d[i - r];
	
	
	reconst(1,n,k);

	fclose(f);
	fclose(g);
}