Pagini recente » Cod sursa (job #2393769) | Cod sursa (job #2573947) | Cod sursa (job #183657) | Cod sursa (job #2505780) | Cod sursa (job #2899440)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("planeta.in");
ofstream fout("planeta.out");
int bst[30], preordine[30], ipre = 0;
void rezolvare(int f, int l, long long int perm){
//cout<<f<<" "<<l<<endl;
if(f <= l){
int i;
for(i = f; i <= l; i++){
int arb = bst[i-f] * bst[l-i];
if(perm >= arb)
perm = perm-arb;
else{
preordine[ipre] = i;
//cout<<i<<endl;
ipre++;
break;
}
}
rezolvare(f, preordine[ipre-1]-1, perm/bst[l-preordine[ipre-1]]);
rezolvare(i+1, l, perm%bst[l-i]);
}
else{
return;
}
}
int main()
{
int N;
long long int K;
fin>>N>>K;
bst[0] = bst[1] = 1;
for(int i = 2; i<N; i++){
for(int j = 0; j<i; j++){
bst[i] = bst[i] + bst[j]*bst[i-j-1];
}
}
rezolvare(1, N, K-1);
for(int i = 0; i<ipre; i++)
fout<<preordine[i]<<" ";
}