Submission #1201719

#TimeUsernameProblemLanguageResultExecution timeMemory
1201719adiyerPermutation (APIO22_perm)C++20
93.67 / 100
7 ms328 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

void add(vector < int > &v, int pos, int x){
    vector < int > nw;
    for(ll i = 0; i < pos; i++) nw.push_back(v[i]);
    nw.push_back(x);
    for(ll i = pos; i < v.size(); i++) nw.push_back(v[i]);
    v = nw;
}

vector < ll > calc(vector < int > &v) {
    vector < ll > dp(v.size() + 1, 0);
    dp[0] = 1;
    for(int x : v)
        for(int i = 0; i <= x; i++)
            dp[x + 1] += dp[i];
    return dp;
}

vector < int > construct_permutation(ll k){
    ll x = 0, y = 1;
    vector < int > ans;
    while(y * 3 < k){
        ans.push_back(x + 1);
        ans.push_back(x);
        x++, x++, y *= 3;
    }
    while(1){
        ll sum = 0, pos = 1;
        vector < ll > dp = calc(ans);
        for(ll val : dp) sum += val;
        if(sum == k) break;
        for(ll i = 0; i < dp.size(); i++){
            if(sum + dp[i] <= k){
                pos = i;
                sum += dp[i];
            }
        }
        add(ans, pos, x++);
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...