Pagini recente » Profil UAIC_Negrus_Popoiu_Tucar | Cod sursa (job #3145364) | Cod sursa (job #1500514) | Cod sursa (job #304853) | Cod sursa (job #2751653)
#include <fstream>
std::ifstream f("planeta.in");
std::ofstream g("planeta.out");
short Preordine[31];
long long Nr_arbori[31];
short N;
long long K;
void constr_Arbore(short min_nod, short max_nod, long long k, short poz)
{
if(min_nod <= max_nod)
{
Preordine[poz] = min_nod;
long long Nr_arb_st = Nr_arbori[ Preordine[poz] - min_nod ];
long long Nr_arb_dr = Nr_arbori[ max_nod - Preordine[poz] ];
while(Nr_arb_st * Nr_arb_dr < k)
{
k -= Nr_arb_st * Nr_arb_dr;
++Preordine[poz];
Nr_arb_st = Nr_arbori[ Preordine[poz] - min_nod ];
Nr_arb_dr = Nr_arbori[ max_nod - Preordine[poz] ];
}
long long k_st = 1;
while(Nr_arb_dr < k)
{
k -= Nr_arb_dr;
++k_st;
}
constr_Arbore(min_nod, Preordine[poz] - 1, k_st, poz + 1);
constr_Arbore(Preordine[poz] + 1, max_nod, k, poz + (Preordine[poz] - min_nod) + 1);
}
}
int main()
{
f >> N >> K;
Nr_arbori[0] = Nr_arbori[1] = 1;
for(int i = 2; i < N; ++i)
Nr_arbori[i] = Nr_arbori[i-1] * (4 * i - 2) / (i + 1);
constr_Arbore(1, N, K, 1);
for(int i = 1; i <= N; ++i)
g << Preordine[i] << ' ';
return 0;
}