poj2018 Best Cow Fences 求助
  • 板块学术版
  • 楼主_ReVeLuv
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/24 16:06
  • 上次更新2023/10/27 06:09:18
查看原帖
poj2018 Best Cow Fences 求助
244395
_ReVeLuv楼主2022/10/24 16:06

题面

const int MAXN=1e6+5;
const double eps=1e-4,INF=1e18;
int n,L;
double a[MAXN],b[MAXN],sum[MAXN];
//max_{L<=i<=n}(sum_i-min_{0<=j<=i-L}(sum_j)) 
inline bool check(double x){
	for(int i=1;i<=n;i++) b[i]=a[i]-x;
	for(int i=1;i<=n;i++) sum[i]=b[i]+sum[i-1];
	double mns=INF,ans=-INF;
//	cout<<mns<<" "<<ans<<endl;
	for(int i=0;i<=i-L-1;i++) mns=min(mns,sum[i]);
	for(int i=L;i<=n;i++){
		mns=min(mns,sum[i-L]);
		ans=max(ans,sum[i]-mns);
	}
	return (ans>=0)?true:false;
}
signed main()
{
	n=read(),L=read();
	for(int i=1;i<=n;i++) a[i]=read();
	double l=-1e10,r=1e10;
	while(fabs(l-r)>eps){
		double mid=(l+r)/2;
		if(check(mid)) l=mid;
		else r=mid;
	}
	write(1000*r),puts("");
}

T 飞了,自己随便打了几组好像都挺对的,不知道出了什么问题。

思路和网络上主流的是差不多的。

2022/10/24 16:06
加载中...