Cod sursa(job #256587)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 11 februarie 2009 21:59:33
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>

#define MAXN 32
#define long long long

long v[MAXN];
long n, k, i, j;

void parc(long st, long dr, long k) {
    long s = 0, x, y, i;
    if (st > dr) return;
    if (st == dr) {
        printf("%lld ", st);
        return;
    }
    for (i = st; i <= dr; ++i) {
		x = v[i - st];
        y = v[dr - i];
        s += x * y;
        if (s > k) {
			break;
		}
    }
    k = k - (s - x * y);
    printf("%lld ", i);
    parc(st, i - 1, k / y);
    parc(i + 1, dr, k % y);
}

int main() {
	freopen("planeta.in", "r", stdin);
	freopen("planeta.out", "w", stdout);
	scanf("%lld %lld ", &n, &k);
	v[0] = 1;v[1] = 1;
	for (i = 2; i <= n; ++i) {
		for (j = 1; j <= i; ++j) {
			v[i] = v[i] + v[j - 1] * v[i - j];
		}
	}
	parc(1, n, k - 1);
	return 0;
}