Pagini recente » Cod sursa (job #3293466) | Cod sursa (job #372857) | Cod sursa (job #1332158) | Cod sursa (job #3246764) | Cod sursa (job #2749746)
#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;
}
}
}