Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
6548 | 18级蔡越同 | 2021北京队选拔模拟赛1-A | C++ | 通过 | 100 | 57 MS | 3384 KB | 737 | 2021-04-03 14:45:08 |
#include <bits/stdc++.h> #define int long long using namespace std; int n,a[200010],pre[200010]; double ans; double f(int x,int mid){ return (double)((pre[n]-pre[n-x])+(pre[mid]-pre[mid-x-1]))/(double)(x*2+1)-(double)a[mid]; } signed main(){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } sort(a+1,a+1+n); for(int i=1;i<=n;i++){ pre[i]=pre[i-1]+a[i]; } for(int i=1;i<=n;i++){ int l=1,r=min(i-1,n-i); int num=0; while(l<=r){ int mid=(l+r)/2; if(f(mid,i)>=f(mid-1,i)) l=mid+1,num=mid; else r=mid-1; } ans=max(ans,f(num,i)); } printf("%.4f",ans); return 0; }