Pagini recente » Istoria paginii utilizator/cristinelandrei | Istoria paginii runda/test_concurs | Istoria paginii utilizator/paducosti | Cod sursa (job #993397) | Cod sursa (job #2023363)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 30
FILE*fi,*fo;
long long v[1 + MAXN];
long long calc(int n){
if(v[n] == 0){
for(int i = 1; i <= n; i++)
v[n] += calc(i - 1) * calc(n - i);
}
return v[n];
}
void show(int offset, int n, long long k){
if(n == 0){
return ;
}
if(n == 1){
fprintf(fo,"%d ", offset + 1);
return ;
}
int i = 1;
long long s = 0;
while(s < k){
s += v[i - 1] * v[n - i];
i++;
}
i--;
s -= v[i - 1] * v[n - i];
k -= s;
fprintf(fo,"%d ", offset + i);
show(offset, i - 1, 1 + (k - 1) / v[n - i]);
show(offset + i, n - i, k - v[n - i] * ((k - 1) / v[n - i]));
}
int main(){
fi = fopen("planeta.in","r");
fo = fopen("planeta.out","w");
int n;
long long k;
fscanf(fi,"%d%lld", &n, &k);
v[0] = 1;
v[1] = 1;
calc(n);
/*for(int i = 1; i <= n; i++)
printf("%d\n", v[i]);*/
show(0, n, k);
fclose(fi);
fclose(fo);
return 0;
}