大佬们看看我这样判断为什么不对
查看原帖
大佬们看看我这样判断为什么不对
1106289
KomorKomor楼主2024/5/5 20:50
#include <bits/stdc++.h>
using namespace std;
int n,S,T;
double a[100010],s[100010];
int f(double mid){
    s[0]=0;
    for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
    deque<int> q;
    for(int i=1;i<=n;i++){
        if(i>=S){
            while(!q.empty()&&s[i-S]<s[q.back()]) q.pop_back();
            q.push_back(i-S);
        }
        if(!q.empty()&&q.front()<i-T) q.pop_front();
        if(!q.empty()&&s[i]-s[q.front()]>=mid*(i-q.front())) return 1;
    }
    return 0;
}
int main(){
    cin>>n>>S>>T;
    double minv=INT_MAX,maxv=INT_MIN;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        minv=min(minv,a[i]);
        maxv=max(maxv,a[i]);
    }
    double l=minv,r=maxv;
    while(r-l>1e-5){
        double mid=(l+r)/2;
        if(f(mid)) l=mid;
        else r=mid;
    }
    printf("%.3lf",l);
    return 0;
}

2024/5/5 20:50
加载中...