「一本通 1.2 例 2」Best Cow Fences --二分答案

loj 10012

题目分析:

  • 二分平均数,将原数列减去平均数,选 s u m [ i ] m i n ( s u m [ j ] ) sum[i]-min(sum[j]) sum[i]min(sum[j])是否大于等于0
  • 注意答案要用 r r r来转 i n t int int

Code:

#include <bits/stdc++.h>
using namespace std;
#define maxn 100010
#define eps 1e-6

int n,L;
double a[maxn],b[maxn],s[maxn];

inline bool check_(double x) {
	s[0]=0;
	for(int i=1;i<=n;++i) {
		b[i]=a[i]-x;
		s[i]=s[i-1]+b[i];
	}
	double mind=3000,maxd=-3000;
	for(int i=L;i<=n;++i) {
		mind=min(mind,s[i-L]);
		maxd=max(maxd,s[i]-mind);
		if(maxd>=0) return true;
	}
	if(maxd>=0) return true;
	else return false;
}

void readda_() {
	scanf("%d%d",&n,&L);
	double r=-1;
	for(int i=1;i<=n;++i) {
		scanf("%lf",&a[i]);
		r=max(r,a[i]);
	}
	double l=0,mid;//,ans;
	while(r-l>eps) {
		mid=(l+r)/2;
		if(check_(mid)) {
		// ans=mid;
			l=mid;
		}
		else r=mid;
	}
	printf("%d",(int)(r*1000));
}

int main() {
	freopen("a.txt","r",stdin);
	readda_();
	return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务