Submission #1363382

#TimeUsernameProblemLanguageResultExecution timeMemory
1363382AvianshPermutation (APIO22_perm)C++20
100 / 100
1 ms344 KiB
#include "perm.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> construct_permutation(long long k)
{
    vector<int>perm = {};
    auto addn = [&] () {
        perm.push_back(perm.size());
    };
    auto add1 = [&] () {
        for(int &i : perm){
            i++;
        }
        perm.push_back(0);
    };
    auto add3 = [&] () {
        addn();
        int pos0 = 1e9;
        int pos1 = 1e9;
        for(int i = 0;i<perm.size();i++){
            if(perm[i]==0){
                pos0=i;
            }
            if(perm[i]==1){
                pos1=i;
            }
        }
        if(pos1<pos0){
            //good
            addn();
            for(int &i : perm){
                if(i>=2){
                    i++;
                }
            }
            perm.push_back(2);
        }
        else{
            add1();
            addn();
            add1();
        }
    };
    vector<int>adds;
    while(k){
        adds.push_back(k%4);
        k/=4;
    }
    while(--adds.back()){
        add1();
    }
    adds.pop_back();
    reverse(adds.begin(),adds.end());
    for(int k : adds){
        if(k==0){
            addn();
            addn();
        }
        else if(k==1){
            addn();
            addn();
            add1();
        }
        else if(k==2){
            addn();
            add1();
            addn();
        }
        else if(k==3){
            add3();
        }
    }
	return perm;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...