Submission #592179

#TimeUsernameProblemLanguageResultExecution timeMemory
592179tutisUplifting Excursion (BOI22_vault)C++17
80 / 100
4144 ms189520 KiB
/*input 1 5 0 0 6 */ #pragma GCC optimize ("O3") #pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; template <typename T> using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; using ll = long long; using ull = unsigned long long; using ld = long double; mt19937_64 rng(0); int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll M; ll L; cin >> M >> L; ll A_[2 * M + 1]; ll* A = A_ + M; for (ll i = -M; i <= M; i++) cin >> A[i]; L = -L; ll cnt = 0; for (ll l = -M; l <= M; l++) { L += l * A[l]; cnt += A[l]; } A[0] = 0; ld L_ = L; ld C_[2 * M + 1]; ld* C = C_ + M; C[0] = 0; ll sum[M + 2]; for (ll x = M; x >= 1; x--) { for (ll v : {x, -x}) { C[v] = L_ / v; C[v] = max(ld(0), C[v]); C[v] = min(ld(A[v]), C[v]); L_ -= C[v] * v; } sum[x] = (ll)roundl(L_); } sum[0] = 0; sum[M + 1] = L; const ll mxdel = 40000; ll infi = 2e18; ll ej[M + 2][2 * mxdel + 1]; for (ll a = 0; a <= M + 1; a++) for (ll b = 0; b <= 2 * mxdel; b++) ej[a][b] = infi; ej[M + 1][0 + mxdel] = 0; for (ll x = M; x >= 0; x--) { for (ll v : {x, -x}) { for (ll a = -mxdel; a <= mxdel; a++) { ll val = sum[x + 1] + a - sum[x]; ll e = ej[x + 1][a + mxdel]; if (e == infi) continue; ll opt = 0; if (x != 0) opt = val / v; opt = max(opt, 0ll); opt = min(opt, A[v]); for (ll k = max(0ll, opt - x - 5); k <= min(A[v], opt + x + 5); k++) { ll val_ = val - k * v; ll e_ = e + k; if (abs(val_) <= mxdel) { if (e_ < ej[x][val_ + mxdel]) { ej[x][val_ + mxdel] = e_; } } } } } } ll best = ej[0][mxdel]; if (best != infi) cout << cnt - best << "\n"; else cout << "impossible\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...