提交时间:2021-04-03 15:44:48

运行 ID: 6560

#include<bits/stdc++.h> using namespace std; const int N=20005; double ans; int a[N],n,sum[N]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; for(int i=2;i<n;i++){//枚举中位数 int l=1,r=min(i-1,n-i),mid,x; double p=0; while(l<=r){//二分找x mid=(l+r)/2; if(2*p<=a[n-mid+1]+a[i-mid]){ x=mid; l=mid+1; p=(double)(sum[i]-sum[i-x-1]+sum[n]-sum[n-x])/(x*2+1);//2x+1个数的平均数和mid-x和n-x+1的平均数 } else r=mid-1; } if(x){ p-=a[i]; if(p>ans) ans=p; } } printf("%.4f",ans); return 0; }