Pagini recente » Cod sursa (job #2440104) | Cod sursa (job #2722560) | Cod sursa (job #385882) | Cod sursa (job #1627172) | Cod sursa (job #2898475)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
int n, k;
vector<int> p(100000);
int verif_preord(int st, int dr)
{
int i;
if(st >= dr) return 1;
int ok = 1;
i = st + 1;
while(i <= dr && p[i] <= p[st])
i++;
while(i <= dr)
if(p[i] < p[st]) return 0;
else i++;
return verif_preord(st + 1, i - 1) * verif_preord(i, dr);
}
int main()
{ifstream f("planeta.in");
ofstream g("planeta.out");
f >> n >> k;
p = vector<int>(n);
int i;
for(i = 1; i <= n; i++)
p[i - 1] = i;
///permutarea identica va reprezenta intotdeauna o posibila parcurgere in preordine
///de aceea, initializez contorul cu 1
int nr = 1;
while(next_permutation(p.begin(), p.end()))
if(verif_preord(0, n - 1))
{
nr++;
if(nr == k)
for(i = 0; i < n; i++)
g << p[i] << ' ';
}
f.close();
g.close();
return 0;
}