Pagini recente » Cod sursa (job #1815682) | Cod sursa (job #1155165) | Cod sursa (job #1497955) | Cod sursa (job #756369) | Cod sursa (job #2749833)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("planeta.in");
ofstream fout("planeta.out");
unsigned short n;
long long k;
long long dp[32];
void nrBST(int x)
{
dp[0] = 1;
for(int i = 1; i <= x; ++i)
for(int j = 1; j <= i; ++j)
dp[i] += dp[j-1]*dp[i-j]; // dp[x] = nr de BST cu x noduri
}
void findPerm(short start, short n, long long k)
{
cout << k << " ";
if(n == 0)
return;
if(n == 1)
{
fout << start + 1<<" ";
return;
}
for(int i = 1 ; i <= n; i++)
{ if(dp[i-1]*dp[n-i] >= k)
{
fout << start + i<<" ";
findPerm(start, i-1, (k-1)/dp[n-i] + 1);
findPerm(start+i, n-i, (k-1)%dp[n-i] + 1);
return;
}
k -= dp[i-1]*dp[n-i];
}
}
int main()
{
fin>>n>>k;
nrBST(n);
findPerm(0,n,k);
return 0;
}