Cod sursa(job #3135898)

Utilizator Alex_Cristea72Cristea Alexandru Alex_Cristea72 Data 4 iunie 2023 17:32:18
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f1("../planeta.in");
ofstream f2("../planeta.out");

long long numere_catalane[33];
long long K;
int N;

void Catalan(int n) {
    numere_catalane[0] = 1;
    numere_catalane[1] = 1;
    int i = 1;
    while (i < n) {
        numere_catalane[i] = 0;
        int j = 0;
        while (j < i) {
            numere_catalane[i] += numere_catalane[j] * numere_catalane[i - 1 - j];
            j++;
        }
        i++;
    }
}


void Permutare(int x, int y, long long k) {
    if (x > y)
        return;
    if (x == y) {
        f2 << x << " ";
        return;
    }
    int i;
    for (i = x; numere_catalane[i - x] * numere_catalane[y - i] <= k && i <= y; i++)
        k -= numere_catalane[i - x] * numere_catalane[y - i];
    f2 << i << " ";
    Permutare(x, i - 1, k / numere_catalane[y - i]);
    Permutare(i + 1, y, k % numere_catalane[y - i]);
}


int main() {
    f1 >> N >> K;

    Catalan(N);
    Permutare(1, N, K - 1);

    return 0;
}