Cod sursa(job #262909)

Utilizator ErgoVicol Sergiu Constantin Ergo Data 19 februarie 2009 18:56:58
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

ifstream fin("planeta.in");
ofstream fout("planeta.out");

#define ll long long
#define NMAX 35

ll Comb[NMAX], K;
int N;

void nodSearch (int Parent, int Length, ll M);

int main()
{
        int i, j;
        
        fin>>N>>K;

        Comb[0] = 1;
        for (i = 1; i  <= N + 1; i++)
                for (j = 0; j <= i - 1; j++)
                        Comb[i] += Comb[j] * Comb[i - 1 - j];

        nodSearch(1, N, K - 1);

        fout.close();
        return 0;
}

void nodSearch (int Parent, int Length, ll M)
{
        if (Length == 0)
                return ;
                
        int i, Root;

        for (Root = 1; Comb[Root - 1] * Comb[Length - Root] <= M; Root++)
                M -= Comb[Root - 1] * Comb[Length - Root];

        fout <<Root + Parent - 1 <<' ' ;
        if (Root > 1)           nodSearch(Parent , Root - 1, M / Comb[Length - Root]);
        if (Root < Length)      nodSearch(Root + Parent , Length - Root, M % Comb[Length - Root]);
        
}