Submission #707719

#TimeUsernameProblemLanguageResultExecution timeMemory
707719JohannUplifting Excursion (BOI22_vault)C++14
5 / 100
5068 ms12136 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() const int MAXSIZE = 1000000; 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]; 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 (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...