Submission #731492

#TimeUsernameProblemLanguageResultExecution timeMemory
731492mohav48173Feast (NOI19_feast)C++14
0 / 100
1053 ms4812 KiB
#include<bits/stdc++.h> using namespace std; int n,k; long long a[400000]; long long m[400000]; long long mincnt=0; double score=0; double get(int ind) { if(ind<0)return 0; else return m[ind]; } void calc(double lam) { double bestscore=0; long long bestcnt=0; double bestnxt=-lam; long long nxtcnt=0; for(int i=0;i<n;i++) { if(bestscore-lam-get(i-1)>bestnxt || (bestscore-lam-get(i-1)==bestnxt && nxtcnt>bestcnt)) { bestnxt=bestscore-get(i-1)-lam; nxtcnt=bestcnt; } if(bestnxt+get(i)>bestscore || (bestnxt+get(i)==bestscore && nxtcnt+1<bestcnt)) { bestscore=bestnxt+get(i); bestcnt=nxtcnt+1; } } mincnt=bestcnt; score=bestscore; } int main() { cin>>n>>k; for(int i=0;i<n;i++)cin>>a[i]; m[0]=a[0];for(int i=1;i<n;i++)m[i]=m[i-1]+a[i]; double l=0,r=1e16; while((r-l)>1e-6) { double mid=(l+r)/2; calc(mid); if(mincnt<=k)r=mid; else l=mid; } calc(r); cout<<round(score+k*r)<<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...