Submission #708028

#TimeUsernameProblemLanguageResultExecution timeMemory
708028JohannUplifting Excursion (BOI22_vault)C++14
5 / 100
5043 ms8724 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair<ll, ll> pii; typedef vector<pii> vpii; typedef vector<ll> vi; #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() void resetPQ(priority_queue<pii, vpii> &q, int cut) { priority_queue<pii, vpii> qq; while (!q.empty()) { pii tmp = q.top(); q.pop(); if (tmp.second >= cut) qq.push(tmp); } swap(q, qq); } int main() { ios::sync_with_stdio(false); cin.tie(0); ll M, L; cin >> M >> L; vi A(2 * M + 1); for (int i = 0; i < sz(A); ++i) cin >> A[i]; int an = accumulate(A.begin(), A.begin() + M, 0); int ap = accumulate(A.begin() + M + 1, A.begin() + 2 * M + 1, 0); int MAXSIZE = 2 * M * max(an, ap); vi dp(MAXSIZE, -1); ll center = MAXSIZE / 2; dp[center] = A[M]; for (int foo = 0; foo < 2; ++foo) { reverse(all(A)), reverse(all(dp)); for (ll m = 1; m <= M; ++m) { ll maxNum = A[m + M]; for (ll r = 0; r < m; ++r) { priority_queue<pii, vpii> q; for (int i = 0; m * i + r < sz(dp); ++i) { int idx = m * i + r; while (!q.empty() && q.top().second < idx - maxNum * m) q.pop(); if (sz(q) > 2 * m) resetPQ(q, idx - maxNum * m); if (dp[idx] != -1) q.push({dp[idx] - i, idx}); if (!q.empty()) dp[idx] = i + q.top().first; } } } } ll ans = -1; if (0 <= center + L && center + L < sz(dp)) ans = dp[center + L]; if (ans == -1) cout << "impossible\n"; else cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...