Cod sursă (job #686009)

Utilizator avatar iulia.morariu Iulia Ela Morariu iulia.morariu IP ascuns
Problemă Arbperm Compilator cpp-32 | 1,79 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 ian. 2023 15:54:54 Scor 65
#include <bits/stdc++.h>

using namespace std;

ifstream fin("arbperm.in");
ofstream fout("arbperm.out");

vector <int> baza;
void nexp_perm(){
    int poz = 0;
    int n = baza.size();

    for(int i = 0; i < n; i++){
        if(baza[i] == n){
            if(i == n - 1){
                baza.pop_back();
                nexp_perm();
                baza.insert(baza.begin(), n);
                break;
            }else{
                swap(baza[i], baza[i + 1]);
                break;
            }
        }
    }
}

int main()
{
    //1.
    int n, k;

    //2.
    fin >> n >> k;
    int v[n];

    //3.
    for(int i = 0; i < n; i++) fin >> v[i];

    int poz = 0;

    for(int i = 0; i < n; i++){
        if(v[i] == n) poz = i;
        else{
            baza.push_back(v[i]);
        }
    }
    //poz++;

    int cnt = 0;
    while(true){
      /*
        cout << "Baza permutarii noastre : ";
        for(int i = 0; i < n - 1; i++) cout << baza[i] << " ";
        cout << endl << "Pozitia lui " << n << " in permutare : " << poz << endl;

        cout << "  -- > Formam , de la permutarea asta , " << n - poz - 1 << " altele" << endl;
*/
        if(k <= n - poz - 1){
            //cout << "  -- > A k-a permutare e din baza asta !! Aflam poz la care a n..." << endl;
            //cout << "  -- > k = " << k << endl;
            poz = poz + k;
            //cout << "  -- > Pozitia este " << poz << endl;
            break;
        }else{
            //cout << "  -- > Mai cautam..." << endl;
            k -= n - poz;
            poz = 0;
            nexp_perm();
        }
        //cout << endl;
    }

    baza.insert(baza.begin() + poz, n);
    for(int i = 0; i < n; i++){
        fout << baza[i] << " ";
    }



    return 0;
}