Submission #1213552

#TimeUsernameProblemLanguageResultExecution timeMemory
1213552dajeffFeast (NOI19_feast)C++20
4 / 100
85 ms9800 KiB
/* 5 2 1 -10 1 -10 1 5 1 2 -1 2 -10 2 1 1 1000000 */ #include <bits/stdc++.h> #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; using ll = long long; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; ll a[n]; for (int i = 0; i < n; ++i) { cin >> a[i]; } double l = 0, r = 1e15, m, dp[n + 1][2]; int cnt[n + 1][2]; for (int kk = 0; kk < 50; ++kk) { m = (l + r) / 2; bool b = false; if (r - l <= 1e-6) { m = l; b = true; } dp[0][0] = 0; dp[0][1] = -1e18; cnt[0][0] = cnt[0][1] = 0; for (int i = 0; i < n; ++i) { if (dp[i][0] < dp[i][1]) { dp[i + 1][0] = dp[i][1]; cnt[i + 1][0] = cnt[i][1]; } else { dp[i + 1][0] = dp[i][0]; cnt[i + 1][0] = cnt[i][0]; } double dp0 = dp[i][0] - m, dp1 = dp[i][1]; if (dp0 < dp1) { dp[i + 1][1] = dp1 + a[i]; cnt[i + 1][1] = cnt[i][1]; } else { dp[i + 1][1] = dp0 + a[i]; cnt[i + 1][1] = cnt[i][0] + 1; } } // cout << "cnt: " << (dp[n][0] < dp[n][1] ? cnt[n][1] : cnt[n][0]) << endl; if ((dp[n][0] < dp[n][1] ? cnt[n][1] : cnt[n][0]) <= k) { r = m; } else { l = m; } if (b) { break; } // cout << "lamb: " << m << endl; } cout << static_cast<ll>(round(dp[n][0] < dp[n][1] ? dp[n][1] + m * min(cnt[n][1], k) : dp[n][0] + m * min(cnt[n][0], k))) << endl; 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...