Pagini recente » Cod sursa (job #687102) | Cod sursa (job #54676) | Cod sursa (job #389106) | Cod sursa (job #754423) | Cod sursa (job #2253610)
#include <bits/stdc++.h>
using namespace std;
long long c[35];
bool viz[35];
int x[35];
long long k;
void solve(int n, long long inm, int v[]) {
if (n == 0)
return ;
long long ans = 0;
int last = n;
for (int i = 1; i <= n; ++i) {
ans += c[i - 1] * c[n - i];
if (inm * ans >= k) {
last = i;
break;
}
}
int last1 = last;
last = v[last];
viz[last] = 1;
printf("%d ", last);
last = last1;
for (int i = 1; i < last; ++i)
k -= inm * c[i - 1] * c[n - i];
for (int i = 1; i < last; ++i)
x[i] = v[i];
solve(last - 1, c[n - last], x);
for (int i = last + 1; i <= n; ++i)
x[i - last] = v[i];
solve(n - last, 1, x);
}
int main() {
freopen("planeta.in", "r", stdin);
freopen("planeta.out", "w", stdout);
c[0] = 1;
c[1] = 1;
for (int i = 2; i <= 30; ++i)
c[i] = i * c[i - 1] * 2 * (2 * i - 1) / (i * (i + 1));
/*for (int i = 1; i <= 30; ++i)
printf("%lld\n", c[i]);*/
int n;
scanf("%d", &n);
scanf("%lld", &k);
for (int i = 1; i <= n; ++i)
x[i] = i;
solve(n, 1, x);
return 0;
}