Submission #721672

#TimeUsernameProblemLanguageResultExecution timeMemory
721672The_SamuraiUplifting Excursion (BOI22_vault)C++17
0 / 100
3 ms4308 KiB
#pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2") #include "bits/stdc++.h" using namespace std; using ll = long long; int INF = 1e9; void solve() { int n, zero = 0; ll l; cin >> n >> l; vector<ll> a(n + 1), b(n + 1); for (int i = 0; i < n; i++) cin >> b[n - i]; cin >> zero; for (int i = 1; i <= n; i++) cin >> a[i]; if (l < 0) { swap(a, b); l = -l; } if (*max_element(a.begin(), a.end()) <= 100) { int N = 5e5 + 1e4, ans = 0; vector<int> dp_plus(N, -INF), dp_minus(N, -INF); dp_plus[0] = dp_minus[0] = 0; if (l > N) { cout << "impossible"; return; } int sum1 = 0, sum2 = 0; for (int i = 1; i <= n; i++) { sum1 += a[i] * i; sum2 += b[i] * i; for (int j = sum1; j >= i; j--) { for (int k = 1; k <= a[i] and i * k <= j; k++) { if (dp_plus[j - i * k] >= 0) { dp_plus[j] = max(dp_plus[j], dp_plus[j - i * k] + k); break; } } } for (int j = sum2; j >= i; j--) { for (int k = 1; k <= b[i] and i * k <= j; k++) { if (dp_minus[j - i * k] >= 0) { dp_minus[j] = max(dp_minus[j], dp_minus[j - i * k] + k); break; } } } } if (sum1 >= l) { ans = max(ans, dp_plus[sum1] + dp_minus[sum1 - l]); } if (ans == 0) cout << "impossible"; else cout << ans + zero; return; } } int main() { ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr); int queries = 1; #ifdef test_cases freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); // cin >> queries; #else // cin >> queries; #endif for (int test_case = 1; test_case <= queries; test_case++) { solve(); // cout << '\n'; } }
#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...