Cod sursă (job #686012)

Utilizator avatar morariu.tudor Morariu Tudor morariu.tudor IP ascuns
Problemă Arbperm Compilator cpp-32 | 3,97 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 ian. 2023 16:10:50 Scor 25
/***
*    ███╗   ███╗ ██████╗ ██████╗  █████╗ ██████╗ ██╗██╗   ██╗████████╗██╗   ██╗██████╗  ██████╗ ██████╗ 
*     ████╗ ████║██╔═══██╗██╔══██╗██╔══██╗██╔══██╗██║██║   ██║╚══██╔══╝██║   ██║██╔══██╗██╔═══██╗██╔══██╗
*      ██╔████╔██║██║   ██║██████╔╝███████║██████╔╝██║██║   ██║   ██║   ██║   ██║██║  ██║██║   ██║██████╔╝
*       ██║╚██╔╝██║██║   ██║██╔══██╗██╔══██║██╔══██╗██║██║   ██║   ██║   ██║   ██║██║  ██║██║   ██║██╔══██╗
*        ██║ ╚═╝ ██║╚██████╔╝██║  ██║██x║  ██║██║  ██║██║╚██████╔╝██╗██║   ╚██████╔╝██████╔╝╚██████╔╝██║  ██║
*         ╚═╝     ╚═╝ ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝ ╚═════╝ ╚═╝╚═╝    ╚═════╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═╝
*                                                                                                       
*/
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector> 

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

#define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
 
void debug(vector<int> v)
{
    for(int i = 0;i < v.size();i++) cout << v[i] << ' ';
    cout << endl;
}
int firstDigit(int n)
{
    while (n >= 10) n /= 10;
    return n;
}

string decToBin(int decimal, int sz)
{
    string ans;
    int it = 0;
    while(decimal)
    {
        ans.push_back(decimal % 2 + '0');
        decimal /= 2;
    }
    reverse(ans.begin(), ans.end());
    while(ans.size() < sz) ans.insert(ans.begin(), '0');

    return ans;
}

vector<int> b;
vector<int> v;
int n, k; 

void nextP()
{
    for(int i = 0;i < b.size();i++)
    {
        if(b[i] == b.size())
        {
            if(i < b.size() - 1)
            {
                swap(b[i], b[i + 1]);
                return;
            }
            else 
            {
                b.pop_back();
                nextP();
                b.insert(b.begin(), b.size() + 1);
                return;
            }
        }
    }
}

int main()
{
    fin >> n >> k;
    v.resize(n);


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

    for(int i = 0;i < n;i++)
    {
        if(v[i] != n)
        {
            b.push_back(v[i]);
        }
        else ppos = i;
    }

    

    while(true)
    {
        //cout << "ppos: " << ppos << " b: ";
        debug(b);
        if(k <= n - ppos - 1)
        {
            ppos = ppos + k;
            break;
        }
        else
        {
            k -= (n - ppos);
            nextP();
            ppos = 0;
        }
    }
    
    b.insert(b.begin() + ppos, n);

    for(int i = 0;i < n;i++) fout << b[i] << " ";
    cout << endl;
}