Cod sursa(job #2023363)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 18 septembrie 2017 20:17:48
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#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;
}