Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
6550 | 18级李灏冬 | 2021北京队选拔模拟赛1-A | C++ | 解答错误 | 90 | 92 MS | 6516 KB | 2114 | 2021-04-03 15:01:28 |
#include<bits/stdc++.h> #define int long long #define LD long double using namespace std; const int inf=0x3f3f3f3fll; int read(){ int res=0; int f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ res=res*10+ch-'0'; ch=getchar(); } return res*f; } void out(int x){ if(x>=10) out(x/10); putchar(x%10+'0'); } void out1(int x){ if(x<0) putchar('-'); out(abs(x)); } void out2(int x){ out1(x); putchar('\n'); } int n; LD a[200005]; LD ans=-2000000009.1; LD sum[200005]; int pos; /* LD que[200005]; int top; */ LD GetMin(LD a,LD b){ if(a<=b) return a; return b; } LD GetMax(LD a,LD b){ if(a>=b) return a; return b; } /* void dfs(int x,LD sum,int num){ if(top%2!=0){ LD mem=(sum/((LD)num))-que[top/2+1]; ans=GetMax(ans,mem); } if(top%2==0){ LD mem=(sum/((LD)sum))-(que[top/2]+que[top/2+1])/2.0; ans=GetMax(ans,mem); } for(int i=x+1;i<=n;i++){ int mir=top; que[++top]=a[i]; dfs(i,sum+a[i],num+1); top=mir; } } */ signed main(){ n=read(); for(int i=1;i<=n;i++){ scanf("%Lf",&a[i]); } sort(a+1,a+1+n); 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=GetMin(i-1,n-i); int mid; while(l<=r){ mid=(l+r)>>1; if((sum[n]-sum[n-mid]+sum[i]-sum[i-mid-1])/(2.0*((LD)mid)+1.0)>(sum[n]-sum[n-mid+1]+sum[i]-sum[i-mid])/(2.0*((LD)(mid-1))+1)){ l=mid+1; pos=mid; } else r=mid-1; } ans=GetMax(ans,(sum[n]-sum[n-pos]+sum[i]-sum[i-pos-1])/(2.0*((LD)pos)+1)-a[i]); } /* for(int i=1;i<=n;i++){ que[++top]=a[i]; dfs(i,a[i],1); top=0; }*/ printf("%.4Lf\n",ans); return 0; }