洛谷——P1404 平均数

P1404 平均数

 

题目描述

给一个长度为n的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度>=m。

 

前缀和+二分答案

 

#include<iostream>
#include<cstdio>
#include<cstdlib>

#define N 1000006
#define inf 0x7fffffff
#define eps 1e-5
using namespace std;

int n,m;
double a[N],b[N],sum[N];

bool check(double X){
    for(int i=1;i<=n;i++)
        b[i]=a[i]-X,sum[i]=sum[i-1]+b[i];
    double minn=9000000000000;
    for(int i=m;i<=n;i++){
        minn=min(minn,sum[i-m]);
        if(double(sum[i]-minn)+eps>0)
            return true;
    }
    return false;
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%lf",&a[i]);
    
    double l=0,r=2000.00,mid;
    for(int i=1;i<=100;i++){
        mid=(l+r)/2.0;
        if(check(mid)) l=mid;
        else r=mid;
    }
    
    printf("%d",(int)(l*1000));
    
    return 0;
}

 

posted @ 2018-09-29 10:30  清风我已逝  阅读(260)  评论(0编辑  收藏  举报