首页 > 其他分享 >#3742. 「COCI 2015.3」PROSJEK

#3742. 「COCI 2015.3」PROSJEK

时间:2023-02-15 20:36:50浏览次数:53  
标签:int double sum 3742 mid cin PROSJEK mi 2015.3


算法:二分加前缀和
题解:二分查找最大平均值,f函数判断当前平均值mid是否合适,数组元素减去x,求前缀和sum,从sum[k]遍历,mi中存前面的最小值。

点击查看代码
#include<iostream>
#include<algorithm> 
using namespace std;
const int N=3e5+7;
double a[N],sum[N];
int n,k; 
bool f(double mid)
{
	for(int i=1;i<=n;i++)
	{
		sum[i]=sum[i-1]+a[i]-mid;
	}
	double mi=0;
	for(int i=k;i<=n;i++)
	{
		if(sum[i]-mi>0) return true;
		mi=min(mi,sum[i-k+1]);
	}
	return false;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	double ans=0;
	double l=0,r=1e6;
	while(r-l>1e-6)
	{
		double mid=(r+l)/2.0;
		if(f(mid)) l=mid;
		else
		{
			r=mid;
		}
	}

	cout<<l<<"\n";
	return 0;
 } 

标签:int,double,sum,3742,mid,cin,PROSJEK,mi,2015.3
From: https://www.cnblogs.com/xxj112/p/17124540.html

相关文章