Cod sursa(job #654019)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 29 decembrie 2011 13:30:50
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>

#define maxn 31

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

int n,i,j;
long long k,D[maxn];

void build ( int n , long long conf , int ad ){
	if ( !n ){
		return ;
	}
	
	int nod = 1;
	
	while ( D[nod-1] * D[n-nod] < conf && nod < n ){
		conf -= D[nod-1] * D[n-nod]; ++nod;
	}
	
	fprintf(g,"%d ",nod+ad);
	
	long long c1 = conf / D[n-nod] + ((conf % D[n-nod]) != 0);
	long long c2 = conf % D[n-nod] + ((conf % D[n-nod]) == 0) * D[n-nod];
	
	build(nod-1,c1,ad);
	build(n-nod,c2,ad+nod);
}

int main () {
	
	fscanf(f,"%d %lld",&n,&k);
	
	D[0] = 1;
	
	for ( i = 1 ; i <= n ; ++i ){
		for ( j = 0 ; i - j - 1 >= 0 ; ++j ){
			D[i] += D[j] * D[i-j-1];
		}
	}
	
	build(n,k,0);
	fprintf(g,"\n");
	
	fclose(f);
	fclose(g);
	
	return 0;
}