Pagini recente » Cod sursa (job #1125976) | Cod sursa (job #1946912) | Cod sursa (job #3039717) | Cod sursa (job #1259424) | Cod sursa (job #3135898)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f1("../planeta.in");
ofstream f2("../planeta.out");
long long numere_catalane[33];
long long K;
int N;
void Catalan(int n) {
numere_catalane[0] = 1;
numere_catalane[1] = 1;
int i = 1;
while (i < n) {
numere_catalane[i] = 0;
int j = 0;
while (j < i) {
numere_catalane[i] += numere_catalane[j] * numere_catalane[i - 1 - j];
j++;
}
i++;
}
}
void Permutare(int x, int y, long long k) {
if (x > y)
return;
if (x == y) {
f2 << x << " ";
return;
}
int i;
for (i = x; numere_catalane[i - x] * numere_catalane[y - i] <= k && i <= y; i++)
k -= numere_catalane[i - x] * numere_catalane[y - i];
f2 << i << " ";
Permutare(x, i - 1, k / numere_catalane[y - i]);
Permutare(i + 1, y, k % numere_catalane[y - i]);
}
int main() {
f1 >> N >> K;
Catalan(N);
Permutare(1, N, K - 1);
return 0;
}