Pagini recente » Cod sursa (job #65923) | Cod sursa (job #2190054) | Cod sursa (job #2958551) | Cod sursa (job #389649) | Cod sursa (job #2254910)
#include <fstream>
using namespace std;
ifstream fin ("planeta.in");
ofstream fout ("planeta.out");
const int Dim = 35;
int n;
long long k;
long long Catalan[Dim];
void Solve(int st, int n, long long k);
void Dyanamic();
int main() {
fin >> n >> k;
Dyanamic();
Solve(0,n,k);
}
void Dyanamic() {
Catalan[0] = 1;
for ( int i = 1; i <= n; ++i)
for ( int j = 1; j <= i ; ++j)
Catalan[i] += Catalan[i - j] * Catalan[j-1];
}
void Solve(int st, int n, long long k){
if ( n == 0)
return ;
if ( n == 1 ) {
fout << st + 1 << " ";
return;
}
for ( int i = 1; i <= n; ++i) {
if ( Catalan[i - 1] * Catalan[n - i] >= k ) {
fout << st + i << " ";
Solve(st, i - 1, ( k - 1) / Catalan[n - i] + 1 );
Solve(st+ i, n- i,(k - 1) %Catalan[n - i] + 1);
return;
}
k -= Catalan[i - 1] * Catalan[n - i];
}
}