제출 #581252

#제출 시각아이디문제언어결과실행 시간메모리
581252KoDUplifting Excursion (BOI22_vault)C++17
20 / 100
313 ms7816 KiB
#include <bits/stdc++.h> using ll = long long; using std::vector; using std::array; using std::tuple; using std::pair; template <class F> struct fixed : private F { explicit fixed(F&& f) : F(std::forward<F>(f)) {} template <class... Args> decltype(auto) operator()(Args&&... args) const { return F::operator()(*this, std::forward<Args>(args)...); } }; template <class T> constexpr T infty = std::numeric_limits<T>::max() / 2; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int M; ll T; std::cin >> M >> T; if (std::abs(T) > 1000000) { std::cout << "impossible\n"; return 0; } ll zero; vector<ll> low(M), high(M); for (int i = M - 1; i >= 0; --i) { std::cin >> low[i]; } std::cin >> zero; for (int i = 0; i < M; ++i) { std::cin >> high[i]; } const auto calc = [&](const vector<ll>& vec) { vector<int> dp = {0}; for (int w = 1; w <= M; ++w) { const int K = vec[w - 1]; vector<int> next((int)dp.size() + K * w, -infty<int>); for (int r = 0; r < w; ++r) { if (r >= (int)dp.size()) { break; } std::deque<pair<int, int>> deq; for (int q = 0;; ++q) { const int i = q * w + r; if (i >= (int)next.size()) { break; } if (i < (int)dp.size()) { const int add = dp[i] - q; while (!deq.empty() and deq.back().first < add) { deq.pop_back(); } deq.emplace_back(add, q); } while (deq.front().second + K < q) { deq.pop_front(); } next[i] = deq.front().first + q; } } dp = std::move(next); } return dp; }; const auto minus = calc(low); const auto plus = calc(high); int ans = -infty<int>; for (int i = 0; i < (int)minus.size(); ++i) { const int j = T + i; if (0 <= j and j < (int)plus.size()) { ans = std::max(ans, minus[i] + (int)zero + plus[j]); } } if (ans < 0) { std::cout << "impossible\n"; } else { std::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...