Submission #1137475

#TimeUsernameProblemLanguageResultExecution timeMemory
1137475poatZalmoxis (BOI18_zalmoxis)C++20
100 / 100
718 ms53936 KiB
// #pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; #define int long long // #define mkp make_pair #define txt freopen("kout.in", "r", stdin), freopen("kout.out", "w", stdout); const int N = 2000, K = 20; const int mod = 998244353; void solve() { int n, k; cin >> n >> k; int mn = 1e9; vector<int> arr; vector<int> vec(n); for(auto &i : vec) { cin >> i; arr.push_back(i); mn = min(mn, i); } while(mn < 30) { vector<int> add; double cnt = 0; for(int i = 0; i <= vec.size(); i++) { if(i == vec.size() || vec[i] > mn) { if((int) cnt % 2) add.push_back(i); cnt = 0; } else cnt = cnt + 1.0 / pow(2, mn - vec[i]); } reverse(add.begin(), add.end()); vector<int> v2; for(int i = 0; i <= vec.size(); i++) { if(!add.empty() && add.back() == i) { v2.push_back(mn); add.pop_back(); } if(i < vec.size()) v2.push_back(vec[i]); } vec = v2; mn++; } if(vec.size() > n + k) assert(0); // for(auto i : vec) // cout << i << ' '; // return; int len = n + k - vec.size(); vector<int> res; int ind = 0; for(auto i : vec) { if(!len || (ind < arr.size() && arr[ind] == i)) { res.push_back(i); ind++; } else { if(len >= pow(2, i) - 1) { len = len - pow(2, i) + 1; for(int j = pow(2, i); j--;) res.push_back(0); } else { len++; vector<int> v = {i}; for(int j = 0; j <= i; j++) { if(pow(2, i - j) <= len) { v.clear(); for(int k = pow(2, i - j); k--;) v.push_back(j); len -= pow(2, i - j); break; } } for(auto j : v) { if(!len) res.push_back(j); else { len--; res.push_back(j - 1); res.push_back(j - 1); } } len = 0; } } } for(auto i : res) cout << i << ' '; cout << '\n'; } signed main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); int T = 1; for (; T--; solve()); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...