Submission #931874

#TimeUsernameProblemLanguageResultExecution timeMemory
931874fryingducFeast (NOI19_feast)C++17
100 / 100
306 ms24924 KiB
#include<bits/stdc++.h> #define int long long #define double long double #define PB push_back #define maxn 300007 #define bit(x,i) ((x>>i)&1) #define S second #define F first #define MP make_pair using namespace std; typedef pair<int,int> pii; typedef pair<double,double> pdd; typedef pair<double,int> pdi; const int inf = 1e9*3e5; const int mod = 1e9+7; const double PI = acos(-1); const double eps = 1e-3; int n,k,a[maxn]; pdi f[maxn][2]; void readData(){ cin>>n>>k; for (int i=1;i<=n;i++) cin>>a[i]; } bool check(double dak){ f[0][0]={0,0}; f[0][1]={-inf,0}; for (int i=1;i<=n;i++){ f[i][0]=max(f[i-1][0],f[i-1][1]); f[i][1]=max((pdi){f[i-1][1].F+a[i],f[i-1][1].S},(pdi){f[i-1][0].F+a[i]-dak,f[i-1][0].S+1}); } int mim=max(f[n][0],f[n][1]).S; return mim>=k; } void solve(){ double l=0,r=inf,dak; while (l+eps<r){ double mid=(l+r)/2; if (check(mid)) l=mid; else r=mid; } dak=l; check(dak); int ans=round(dak*k+max(f[n][0],f[n][1]).F); cout<<ans; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); readData(); solve(); 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...