求助题解
查看原帖
求助题解
398190
Celestial_Intertwine楼主2021/8/9 20:02

萌新刚学OI,在学习一篇题解时遇到了问题,请各位大佬帮个忙

题目Link

题解代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
    using namespace std;
const int N=100010;
long long n,m,Max;
long long a[N],s[N];//为了防止各种越界,全部开longlong
int main(){
    cin>>n>>m;
    for (int i=1;i<=n;i++) {
        cin>>a[i];
        a[i]=a[i]*10000;//因为答案要*1000并且舍弃小数 所以可以把原数列的每一项*10000 最后得到的答案/10就好
        Max=max(Max,a[i]);//Max为可能的最大平均值
    }
    int l=0,r=Max;
    while (l<=r) {
        bool ok=0;
        long long mid=(l+r)/2,Min=0;
        for (int i=1;i<=n;i++) {
            s[i]=s[i-1]+(a[i]-mid); //s[i]为a[i]减掉mid之后的前缀和
            if (i>=m) {
                Min=min(Min,s[i-m]);
                if (s[i]>Min) { //判断是否平均值能>=mid
                    ok=1;
                    break;
                }
            }
        }
        if (ok) l=mid+1;
        else r=mid-1;
    }
    cout<<(l/10)<<endl;
    return 0;
}

没搞明白 Min=min(Min,s[i-m]);if (s[i]>Min) 这句的意思,有哪位大佬能帮我一下吗

2021/8/9 20:02
加载中...