Submission #1213559

#TimeUsernameProblemLanguageResultExecution timeMemory
1213559dajeffFeast (NOI19_feast)C++20
100 / 100
819 ms40360 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() { // freopen("input.txt", "r", stdin); ios_base::sync_with_stdio(false); cin.tie(nullptr); // // string line;getline(cin, line); // cout << line << endl; // return 0; // int n, k; cin >> n >> k; // cout << n << " " << k << endl; // return 0; vector<ll> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } long double l = 0, r = 1e15, m; vector<vector<long double> > dp(n + 1, vector<long double>(2)); vector<vector<int> > cnt(n + 1, vector<int>(2)); for (int kk = 0; kk < 200; ++kk) { m = (l + r) / 2; bool b = false; if (r - l <= 1e-15) { 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]; } long 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...