제출 #1201692

#제출 시각아이디문제언어결과실행 시간메모리
1201692adiyer순열 (APIO22_perm)C++20
91.33 / 100
7 ms512 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){ int x = 0; vector < int > ans; for(ll bit = 59; bit >= 1; bit--){ if(k >= (1ll << bit)){ for(int i = 0; i < bit; i++) ans.push_back(x++); break; } } 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 && dp[i] > dp[pos]) pos = i; add(ans, pos - 1, x++); // for(ll x : ans) cout << x << '\n'; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...