Pagini recente » Cod sursa (job #1798361) | Cod sursa (job #3207123) | Cod sursa (job #3245322) | Cod sursa (job #3222311) | Cod sursa (job #254179)
Cod sursa(job #254179)
Utilizator |
Victor Rusu victorsb |
Data |
6 februarie 2009 22:31:10 |
Problema |
Planeta |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.81 kb |
#include <cstdio>
#define Nmax 32
#define LL long long
int N;
LL K;
LL D[Nmax];
void read() {
scanf("%d%lld", &N, &K);
}
void rez(int F, int P, LL NR) {
if (P < 1) return;
int pos;
for (pos = 1; pos <= P; ++pos)
if (NR > D[pos - 1] * D[P - pos])
NR -= D[pos - 1] * D[P - pos];
else
break;
printf("%d ", pos + F);
LL cat = NR / D[P - pos];
if (NR % D[P - pos]) ++cat;
LL rest = NR % D[P - pos];
if (!rest) rest = D[P - pos];
rez(F, pos - 1, cat);
rez(F + pos, P - pos, rest);
}
void solve() {
D[0] = 1;
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= i; ++j)
D[i] += D[j - 1] * D[i - j];
}
rez(0, N, K);
}
int main() {
freopen("planeta.in", "r", stdin);
freopen("planeta.out", "w", stdout);
read();
solve();
return 0;
}