Cod sursa(job #2749746)

Utilizator LordNecrateBiowCuciureanu Dragos-Adrian LordNecrateBiow Data 8 mai 2021 02:38:36
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <set>
#include <algorithm>
#include <math.h>
#include <vector>
#include <limits.h>

using namespace std;

ifstream fin("planeta.in");
ofstream fout("planeta.out");

long long Arb[31];
long long n, k, kn;

void ordine(long long, int, int);

int main()
{
	fin >> n >> k;

	Arb[0] = 1;
	Arb[1] = 1;
	for (int i = 2; i <= n; i++)
		for (int j = 0; j < i; j++)
			Arb[i] += Arb[j] * Arb[i - j - 1];
	// det nr de arbori de cautare pt i noduri

	ordine(k, 1, n);
	return 0;
}

void ordine(long long k, int l, int r)
{
	// det ord nodurilor
	bool ok = true;
	for (int i = l; i <= r && ok == true; i++)
	{
		if (k > Arb[i - l] * Arb[r - i])
			k -= Arb[i - l] * Arb[r - i];
		else
		{
			fout << i << ' ';

			ordine(1 + (k - 1) / Arb[r - i], l, i - 1);

			long long kn = k % Arb[r - i];
			if (kn == 0)
				kn = Arb[r - i];
			ordine(kn, i + 1, r);

			ok = false;
		}
	}
}