【演算法競賽進階指南】POJ2018Best Cow Fences
阿新 • • 發佈:2018-12-03
二分法查詢答案
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; double a[100005],b[100005],sum[100005]; int main(){ int n,L; cin>>n>>L; for(int i=1;i<=n;i++) scanf("%lf",&a[i]); double eps=1e-5; double l=-1e6,r=1e6; while(r-l>eps){ double mid=(r+l)/2; for(int i=1;i<=n;i++) b[i]=a[i]-mid; for(int i=1;i<=n;i++) sum[i]=sum[i-1]+b[i]; double ans=-1e10,minval=1e10; for(int i=L;i<=n;i++){ minval=min(minval,sum[i-L]); ans=max(ans,sum[i]-minval); } if(ans>=0) l=mid; else r=mid; } cout<<int(r*1000)<<endl; return 0; }