非二分球条(悬棺)
查看原帖
非二分球条(悬棺)
892084
xinxin2022楼主2024/8/12 10:51

没有使用二分的一种奇怪做法,证明做法假了也行

#include<bits/stdc++.h>
using namespace std;
int n,l=1,r;
double ans;
double a[100005];
double s[100005],s2[100005];
int main(){
	//freopen("P2115_2.in","r",stdin); 
    cin>>n;r=n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
    for(int i=n;i>=1;i--) s2[i]=s2[i+1]+a[i];
    for(int i=2;i<=n;i++){
        if((s[i]*1.0/double(i*1.0))<(s[l]*1.0/double(l*1.0))) l=i;
    }
    for(int i=n-1;i>l;i--){
        if((s2[i]*1.0/double((n-i+1)*1.0))<(s2[r]*1.0/double((n-r+1)*1.0))) r=i;
    }
    if(l+1<r){
        ans=(s[l]+s2[r])/double(l+n-r+1);
    }
    else{
        double maxn=-1;
        for(int i=2;i<n;i++) maxn=max(maxn,a[i]);
        ans=(s[n]-maxn)*1.0/double((n-1)*1.0);
    }
    printf("%.3lf",ans);
    return 0;
}

思路是算最小前缀和和最小后缀和,35pts

2024/8/12 10:51
加载中...