Pagini recente » Cod sursa (job #1795424) | Cod sursa (job #1707822) | Cod sursa (job #328810) | Cod sursa (job #2595901) | Cod sursa (job #2899622)
#include <bits/stdc++.h>
using namespace std;
ifstream f("planeta.in");
ofstream g("planeta.out");
#define cin f
#define cout g
int n;
long long k, catalan[32];
void planeta(int st, int dr, long long k) {
int i;
if( st > dr)
return;
for(i = st; catalan[i - st] * catalan[dr - i] <= k && i <= dr; i++)
k = k - catalan[i - st] * catalan[dr - i];
cout << i <<' ';
if(i > st)
planeta(st, i - 1, k / catalan[dr - i]);
if(i < dr)
planeta(i + 1, dr, k % catalan[dr - i]);
return;
}
int main() {
cin >> n >> k;
catalan[0] = catalan[1] = 1;
for(int i = 2; i <= n; i++)
for(int j = 1; j <= i; j++)
catalan[i] += (catalan[i - j] * catalan[j - 1]);
planeta(1, n, k - 1);
}