Pagini recente » Cod sursa (job #1689683) | Cod sursa (job #1095226) | Cod sursa (job #1404852) | Cod sursa (job #1499224) | Cod sursa (job #3135629)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream fin("planeta.in");
std::ofstream fout("planeta.out");
std::vector<long long> dp(35);
std::vector<int> ans(40);
int pos;
void calculate(int n, long long k, int m)
{
if (n == 0)
return;
int current = 1;
while (k >= dp[current - 1] * dp[n - current])
{
k -= dp[current - 1] * dp[n - current];
current++;
}
ans[++pos] = current + m;
calculate(current - 1, k / dp[n - current], m);
calculate(n - current, k % dp[n - current], m + current);
}
int main()
{
long long n, k;
fin >> n >> k;
dp[0] = 1;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
dp[i] += dp[j - 1] * dp[i - j];
}
}
k--;
calculate(n, k, 0);
for (int i = 1; i <= n; i++)
fout << ans[i] << " ";
return 0;
}