Cod sursa(job #1497590)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 6 octombrie 2015 23:18:03
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <vector>

#define lint long long int
using namespace std;

lint c[31];

vector <int> v;

void det (lint k, int st, int dr) {
    if (dr < st)
        return ;

    for (int i = st; i <= dr; ++ i)
        if (k > c[i - st] * c[dr - i])
            k -= c[i - st] * c[dr - i];
        else {
            v.push_back(i);

            det((k - 1) / c[dr - i] + 1, st, i - 1);
            det((k - 1) % c[dr - i] + 1, i + 1, dr);

            break;
        }
}

int main()
{
    ifstream cin("planeta.in");
    ofstream cout("planeta.out");

    c[0] = 1;
    c[1] = 1;
    c[2] = 2;

    int j;
    for (int i = 3; i <= 30; ++ i)
        for (j = 1; j <= i; ++ j)
            c[i] += c[j - 1] * c[i - j];

    int n = 1;
    lint k = 1;

    cin >> n >> k;

    det(k, 1, n);

    for (int i = 0; i < n; ++ i)
        cout << v[i] << " \n"[i + 1 == n];

    cin.close();
    cout.close();
    return 0;
}