Submission #1212295

#TimeUsernameProblemLanguageResultExecution timeMemory
1212295jasonicPermutation (APIO22_perm)C++20
94.33 / 100
1 ms328 KiB
#include "perm.h"
#include <bits/stdc++.h>

using namespace std;
#define ll long long

int mn, mx;

void pushMin(vector<int> &vec) {
    vec.push_back(mn);
    if(mn == mx) {
        mx++;
    }
    mn--;
}

void pushMax(vector<int> &vec, int cnt) {
    for(int i = cnt+mx-1; i >= mx; i--) {
        vec.push_back(i);
    }
    if(mn == mx) {
        mn--;
    }
    mx += cnt;
}

vector<int> solve(ll k) {
    vector<int> res;
    if(k == 2) {
        pushMin(res);
    } else if (k != 1) {
        for(auto prime : {2, 3, 5, 7}) {
            if(k % prime == 0) {
                res = solve(k/prime);
                pushMax(res, prime-1);
                return res;
            }
        }
        res = solve(k-1);
        pushMin(res);
    }
    return res;
}

vector<int> construct_permutation(ll k) {
    mn = 0, mx = 0;

    vector<int> res = solve(k);
    int mn = 0;
    for(auto &i : res) mn = min(mn, i);
    for(auto &i : res) i -= mn;

    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...