Cod sursa(job #2008926)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 7 august 2017 23:54:23
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
#define l first
#define r second
using namespace std;

ifstream fi("planeta.in");
ofstream fo("planeta.out");

using i64 = long long;
using pii = pair<int, int>;

const int N = 32;


int ant[N];
i64 trees[N];

i64 k;
int n, p;

void make_tree(int st, int dr, i64 k) {	
	if (st > dr) return;
	for (int i = st; i <= dr; ++i) {
		if (k >= trees[i - st] * trees[dr - i])
			k-= trees[i - st] * trees[dr - i];
		else {
			fo << i << ' ';
			make_tree(st, i - 1, k / trees[dr - i]);
			make_tree(i + 1, dr, k % trees[dr - i]); 
			return; } } }

int main() {
	trees[0] = 1;
	for (int i = 1; i < N; ++i) 
		for (int j = 1; j <= i; ++j)
			trees[i]+= trees[j - 1] * trees[i - j];

	fi >> n >> k; --k;
	make_tree(1, n, k);
	fo << endl;

	return 0; }