将每个点依次作为边界,对每个点操作:要么全删左边,要么全删右边,寻最大值,以此求解(具体见代码)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int const N=1e6+7;
int n;
ll a[N],b[N],c[N];  //b是前缀和  //c是后缀和
double ans,z1,z2;
int main(){
    cin >> n;
    for(int i=1;i<=n;++i){
        cin >> a[i];
        b[i]=a[i]+b[i-1];
    }
    for(int i=n;i>=1;--i){
        c[i]=a[i]+c[i+1];
    }
    for(int i=1;i<=n;++i){
        z1= (double) b[i]/i;
        z2= (double) c[i]/(n-i+1);
        ans=max(ans,max(z1,z2));
    }
    printf("%.10lf",ans);
    return 0;
}