Submission #1212435

#TimeUsernameProblemLanguageResultExecution timeMemory
1212435dajeffFeast (NOI19_feast)C++20
4 / 100
1096 ms9784 KiB
/* 5 2 1 -10 1 -10 1 */ #include <bits/stdc++.h> using namespace std; using ll = long long; int main() { int n, k; cin >> n >> k; ll a[n]; for (int i = 0; i < n; ++i) { cin >> a[i]; } double l = 0, r = 1e18, m, dp[n + 1][2]; int cnt[n + 1][2]; while (r - l > 1e-12) { m = (l + r) / 2; 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; } // cout << "lamb: " << m << endl; } cout << static_cast<ll>(round(dp[n][0] < dp[n][1] ? dp[n][1] + m * cnt[n][1] : dp[n][0] + m * cnt[n][0])) << 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...