Submission #1112187

#TimeUsernameProblemLanguageResultExecution timeMemory
1112187PagodePaivaPermutation (APIO22_perm)C++17
91.33 / 100
328 ms504 KiB
#include<bits/stdc++.h>
#include "perm.h"
 
using namespace std;
 
vector <int> solve(long long k){
    if(k == 1) return {};
    if(k%2 == 0){
        vector <int> ans = solve(k/2);
        ans.push_back(ans.size());
        return ans;
    }
    vector <int> ans = solve(k-1);
    for(auto &x : ans){
        x++;
    }
    ans.push_back(0);
    return ans;
}

vector <int> merge(vector <int> a, vector <int> b){
    int tam = b.size();
    for(auto &x : a){
        x += tam;
    }
    for(auto x : b){
        a.push_back(x);
    }
    return a;
}

vector <int> ssolve(long long k){
    vector <int> v = solve(k);
    for(int i = 1;i <= min(k-1, 1010LL);i++){
        long long x = rand() % k;
        long long y = rand() % k;
        long long t = x*y;
        t %= k;
        if(t == 0) t++;
        vector <int> aux = merge(solve(t), solve(k-t+1));
        if(aux.size()< v.size()) v = aux;
    }
    return v;
}

vector<int> construct_permutation(long long k){
    srand(time(0));
    vector <int> ans = ssolve(k);
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...