Pagini recente » Cod sursa (job #720997) | Cod sursa (job #2400749) | Cod sursa (job #1768755) | Cod sursa (job #347564) | Cod sursa (job #312814)
Cod sursa(job #312814)
#include <cstdio>
const char FILEIN[] = "planeta.in";
const char FILEOUT[] = "planeta.out";
const int MAX_N = 40;
int n;
long long k;
long long d[MAX_N];
int sol[MAX_N];
void dinamica() {
d[0] = 1;
for (int i = 1; i <= n; ++i)
for (int j = 0; j < i; ++j)
d[i] += d[j] * d[i-1 - j];
}
void reconst(int st, int dr, long long fact, int start) {
if (st > dr) return;
if (st == dr) {
sol[st] = start;
return;
}
long long sum = 0;
int i;
for (i = 1; i <= dr-st+1; ++i) {
if (sum + d[i-1] * d[dr-st+1 - i] * fact >= k)
break;
sum += d[i-1] * d[dr-st+1 - i] * fact;
}
k -= sum;
sol[st] = i + start-1;
reconst(st + 1, st + i - 1, fact * d[dr - st + 1 - i], start);
reconst(st + i, dr, fact, start + i);
}
int main() {
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
scanf("%d %lld", &n, &k);
dinamica();
reconst(1, n, 1, 1);
for (int i = 1; i <= n; ++i)
printf("%d ", sol[i]);
}