Pagini recente » Cod sursa (job #2720497) | Cod sursa (job #453582) | Cod sursa (job #2553235) | Cod sursa (job #2769924) | Cod sursa (job #2398341)
#define NMAX 32
#include <cstdio>
using namespace std;
FILE *in = fopen("planeta.in", "r"),
*out = fopen("planeta.out", "w");
unsigned long long m = 1, K, A[NMAX];
int N, x = 1, S[NMAX];
void DP() {
A[0] = 1;
for(int i = 1; i <= N; )
for(int j = 0; j < i; )
A[i] += A[j] * A[i - j - 1];
}
void chooseBest(int p, int u) {
if(p > u) return;
if(p == u) {
S[p] = x;
return;
}
int cnt = u - p + 1, i = 1;
long long sum = 0;
for(i; i <= cnt; i++) {
if(sum + 1LL * A[i-1] * A[cnt-i] * m >= K) break;
sum += 1LL * A[i-1] * A[cnt-i] * m;
}
K -= sum;
m *= A[cnt - i];
chooseBest(p + 1, p + i - 1);
m /= A[cnt - i];
x += i;
chooseBest(p + i, u);
x -= i;
}
int main()
{
fscanf(in, "%i %lld", &N, &K);
DP();
chooseBest(1, N);
for(int i = 1; i <= N; i++)
fprintf(out, "%i ", S[i]);
return 0;
}