제출 #1267753

#제출 시각아이디문제언어결과실행 시간메모리
1267753madamadam3Stove (JOI18_stove)C++20
100 / 100
31 ms3572 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int using pi = pair<int, int>; const int INF = 4e18; signed main() { // is this alien trick ?? cin.tie(0)->sync_with_stdio(0); int n, k; cin >> n >> k; vector<int> times(n); for (int i = 0; i < n; i++) { cin >> times[i]; times[i]--; } auto g = [&](int la) { vector<int> DP(n, INF), cnt(n, -INF), prefix_min(n+1, INF); DP[0] = 1+la; cnt[0] = 1; int pb = 0, pc = 0, pv = -times[0] + 1 + la; for (int i = 1; i < n; i++) { int cand = DP[i-1] - times[i] + 1 + la; if (cand < pv || cand == pv && cnt[i-1] < pc) { pc = cnt[i-1]; pv = cand; pb = i; } DP[i] = times[i] + pv; cnt[i] = pc+1; } return make_pair(DP[n-1], cnt[n-1]); }; int lo = 0, hi = 1e9; while (lo < hi) { int mid = lo + (hi - lo) / 2; pi fx = g(mid); if (fx.second > k) { lo = mid + 1; } else { hi = mid; } } pi r1 = g(lo), r2 = g(lo-1); cout << max(r1.first - k * lo, r2.first - k * (lo-1)) << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...