Pagini recente » Cod sursa (job #894377) | Cod sursa (job #2505358) | Cod sursa (job #478378) | Cod sursa (job #2822878) | Cod sursa (job #2253626)
#include <bits/stdc++.h>
using namespace std;
long long c[35];
unsigned long long x[35];
long long k;
void solve(unsigned long long n, long long inm, unsigned long long v[]) {
if (n == 0)
return ;
long long ans = 0;
unsigned long long last = n;
for (unsigned long long i = 1; i <= n; ++i) {
ans += c[i - 1] * c[n - i];
if (inm * ans >= k) {
last = i;
break;
}
}
unsigned long long last1 = last;
last = v[last];
printf("%llu ", last);
last = last1;
for (unsigned long long i = 1; i < last; ++i)
k -= inm * c[i - 1] * c[n - i];
for (unsigned long long i = 1; i < last; ++i)
x[i] = v[i];
solve(last - 1, c[n - last], x);
for (unsigned long long 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 (unsigned long long i = 2; i <= 30; ++i)
c[i] = i * c[i - 1] * 2 * (2 * i - 1) / (i * (i + 1));
/*for (unsigned long long i = 1; i <= 30; ++i)
prunsigned long longf("%lld\n", c[i]);*/
unsigned long long n;
scanf("%llu", &n);
scanf("%llu", &k);
for (unsigned long long i = 1; i <= n; ++i)
x[i] = i;
solve(n, 1, x);
return 0;
}