Submission #707721

#TimeUsernameProblemLanguageResultExecution timeMemory
707721JohannUplifting Excursion (BOI22_vault)C++14
0 / 100
1608 ms21924 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); vi dp2(MAXSIZE, -1); ll center = MAXSIZE / 2; dp[center] = A[M]; for (int foo = 0; foo < 2; ++foo) { reverse(all(A)), reverse(all(dp)), reverse(all(dp2)); for (ll m = 1; m <= M; ++m) { ll maxNum = A[m + M]; for (ll r = 0; r < m; ++r) { multiset<ll> stuff; for (int i = 0; m * i + r < sz(dp); ++i) { int idx = m * i + r; if (dp[idx] != -1) stuff.insert(dp[idx] - i); if (!stuff.empty()) dp2[idx] = i + *stuff.rbegin(); if (idx >= maxNum * m && dp[idx - maxNum * m] != -1) stuff.erase(dp[idx - maxNum * m] - (i - maxNum)); } } swap(dp2, dp); } } 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...