AcWing 102. 最佳牛围栏

农夫约翰的农场由 N

块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头。

约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。

围起区域内至少需要包含f块地,其中 f会在输入中给出。

在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。

#include<bits/stdc++.h>
#define N 1000000
using namespace std;
int a[N];
int n,m;
int maxx;
double sum[N];
bool chack(double x)
{
    for(int i=1;i<=n;i++)
        sum[i]=sum[i-1]+a[i]-x;
    double minn=0;
    for(int i=0,j=m;j<=n;j++,i++)
    {
        minn=min(sum[i],minn);
        if(sum[j]>minn)return true;
    }
    return false;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        maxx=max(maxx,a[i]);
    }
    double l=0,r=maxx;
    while(r>l+1e-6)
    {
        double mid=(l+r)/2;
        if(chack(mid))l=mid;
        else r=mid;
    }
    cout<<int((r*1000));
    return 0;
}

 

posted @ 2021-01-29 10:02  君与  阅读(50)  评论(0编辑  收藏  举报