Pagini recente » Cod sursa (job #2603420) | Cod sursa (job #2680850) | Cod sursa (job #2126194)
#include <stdio.h>
using namespace std;
long long v[31][31];
void rec(int n, long long k, int off)
{
if(n == 0) return;
if(n == 1) {printf("%d ", off + 1);return;}
int i = 1;
while(k >= v[i - 1][n - i])
{
k -= v[i - 1][n - i];
i++;
}
printf("%d ", i + off);
if(k <= v[n - i][0])
{
rec(i - 1, 0, off);
rec(n - i, k, i + off);
}
else if(n == i)
{
rec(i - 1, k, off);
rec(n - i, 0, i + off);
}
else
{
rec(i - 1, k / v[n - i][0], off);
rec(n - i, k % v[n - i][0], i + off);
}
}
int main()
{
freopen("planeta.in","r",stdin);
freopen("planeta.out","w",stdout);
int n;
long long k;
scanf("%d%lld", &n, &k);
int i, j;
v[0][0] = 0;
v[0][1] = 1;
v[1][0] = 1;
v[1][1] = 1;
for(i = 2; i<=n; i++)
{
//v[i][0] = v[0][i] = 0;
for(j = 0; j < i; j++)
{
v[i][0] += v[j][i -1 -j];
v[0][i] += v[j][i -1 -j];
}
for(j = 1; j < i; j++)
{
v[i - j][j] = v[i - j][0] * v[j][0];
}
}
for(i = 0; i<=n; i++)
{
for(j=0;j<=n;j++)
printf("%4lld ", v[i][j]);
printf("\n");
}
rec(n, k-1, 0);
return 0;
}