Submission #1201737

#TimeUsernameProblemLanguageResultExecution timeMemory
1201737adiyerPermutation (APIO22_perm)C++20
92.33 / 100
11 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, s = 0, y = 1; vector < int > ans; vector < int > fac = {3, 2}; while(1){ ll f = fac[s]; y *= f, s = (s + 1) % fac.size(); if(y > k) break; if(f == 3){ for(ll i = f - 2; i >= 0; i--) ans.push_back(x + i); x += f - 1; } } 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...