Submission #949039

#TimeUsernameProblemLanguageResultExecution timeMemory
949039alexddFeast (NOI19_feast)C++17
0 / 100
351 ms12756 KiB
#include<bits/stdc++.h> using namespace std; #define int long long typedef long double ld; const int INF = 1e9; int n,k; int a[300005]; int dp[300005]; int cnt[300005]; int pref[300005]; ld coef; void solve() { int mxm=0,cate=0; for(int i=1;i<=n;i++) { pref[i] = pref[i-1] + a[i]; dp[i] = dp[i-1]; cnt[i] = cnt[i-1]; int aux = mxm + pref[i] - coef; if(aux>dp[i] || (aux==dp[i] && cate+1<cnt[i])) { dp[i] = aux; cnt[i] = cate+1; } if(dp[i]-pref[i]>mxm || (dp[i]-pref[i]==mxm && cate<cnt[i])) { mxm = dp[i]-pref[i]; cate = cnt[i]; } } } /** dp[i] = max(dp[x] - pref[x]) + pref[i] - coef */ signed main() { cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; ld st,dr; st=-INF; dr=INF; for(int it=0;it<100;it++) { coef = (st+dr)/2.0; solve(); if(cnt[n]>=k) st=coef; else dr=coef; } cout<<max((int)0,(int)(dp[n] + cnt[n]*coef)); //cout<<dp[n] + k*coef; 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...