Submission #1172517

#TimeUsernameProblemLanguageResultExecution timeMemory
1172517IskachunUplifting Excursion (BOI22_vault)C++20
100 / 100
1752 ms3512 KiB
#include <iostream> #include <vector> using namespace std; typedef long long ll; void solve () { ll m, l; cin >> m >> l; ll n = 2 * m + 1; vector<ll> a(n); for (ll &x : a) cin >> x; ll sum = 0; vector<ll> c(n); for (ll i = 0; i <= m; i++) sum += (i - m) * a[i], c[i] = a[i]; for (ll i = m + 1; i < n; i++) { c[i] = min(a[i], (l - sum) / (i - m)); sum += c[i] * (i - m); } for (ll i = 0; i < m; i++) { ll val = min(a[i], (l - sum) / (m - i)); c[i] -= val; sum += val * (m - i); } if (abs(sum - l) > m) return cout << "impossible", void(); vector<pair<ll, ll>> cnt; ll tot = 0; for (ll i = 0; i < n; i++) { tot += c[i]; if (i == m) continue; ll j = 1, s = min(m * m, a[i] - c[i]); while (j <= s) { cnt.push_back({j * (i - m), j}); s -= j, j *= 2; } if (s > 0) cnt.push_back({s * (i - m), s}); j = 1, s = min(c[i], m * m); while (j <= s) { cnt.push_back({j * (m - i), -j}); s -= j, j *= 2; } if (s > 0) cnt.push_back({s * (m - i), -s}); } ll m2 = m * m; vector<ll> dp(2 * m2 + 10, -1e18), f(2 * m2 + 10, -1e18); dp[m2] = f[m2] = 0; for (auto [x, y] : cnt) { for (ll i = 0; i <= 2 * m2; i++) { if (i - x <= 2 * m2 and i - x >= 0 and dp[i - x] != -1e18) f[i] = max(f[i], dp[i - x] + y); } dp = f; } if (f[l - sum + m2] + tot >= 0) cout << f[l - sum + m2] + tot; else cout << "impossible"; } int main() { //freopen("filename.in", "r", stdin), freopen("filename.out", "w", stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >> t; while (t--) solve(); }
#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...