Submission #573581

#TimeUsernameProblemLanguageResultExecution timeMemory
573581danikoynovFeast (NOI19_feast)C++14
0 / 100
1096 ms5764 KiB
/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 3e5 + 10; int n; ll k, a[maxn], dp[maxn], cnt[maxn], par[maxn]; pair < ll, int > calc(ll cost) { for (int i = 1; i <= n; i ++) { dp[i] = dp[i - 1]; cnt[i] = cnt[i - 1]; for (int j = 1; j <= i; j ++) { ll sum = dp[j - 1] - cost + par[i] - par[j - 1]; if (sum > dp[i]) dp[i] = sum; if (sum == dp[i]) cnt[i] = max(cnt[i], cnt[j - 1] + 1); } } pair < ll, int > ans = {dp[1], cnt[1]}; for (int i = 2; i <= n; i ++) if (make_pair((ll)dp[i], (int)cnt[i]) > ans) ans = {dp[i], cnt[i]}; return ans; } void solve() { cin >> n >> k; ll cnt = 0; for (int i = 1; i <= n; i ++) { cin >> a[i]; if (a[i] >= 0) cnt ++; par[i] = par[i - 1] + a[i]; } k = min(cnt, k); ll lf = 0, rf = 1e12; while(lf <= rf) { ll mf = (lf + rf) / 2; pair < double, int > cur = calc(mf); if (cur.second >= k) lf = mf + 1; else rf = mf - 1; } double p1 = lf - 1, p2 = lf; pair < ll, int > cur1 = calc(p1), cur2 = calc(p2); cur1.first = cur1.first + cur1.second * p1; cur2.first = cur2.first + cur2.second * p2; double part = 1.0 - (double)(cur1.second - k) / (double)(cur1.second - cur2.second); double slope = (cur1.first - cur2.first); double ans = cur2.first + slope * part; ///cout << cur1.second << " " << cur2.second << " " << part << " " << cur1.second - k << " " << k << endl; if (cur1.second == 1 && cur2.second == 0) { cout << cur1.first << endl; return; } if (cur1.second == cur2.second) { cout << cur1.first << endl; return; } cout << round(ans) << endl; } int main() { solve(); return 0; } /** 7 1 3 4 -1 2 3 -5 1 */
#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...