题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1679
问题相关代码
#include<iostream>
#include<algorithm>
#include<iomanip>
#define int long long
using namespace std;
int n,a[200005],b[200005];
double ans,now;
int min(int a,int b){return a<b?a:b;}
signed main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
b[i]=b[i-1]+a[i];
int m=min(20000,n);
for(int i=1;i<=m;i++){
for(int j=0;j<=min(m-i,i);j++){
now=0;
now+=b[i]-b[i-j];
now+=a[i-j];
now+=b[n]-b[n-j];
now=1.0*now/(2*j+1);
ans=max(ans,now-a[i]);
}
}cout<<fixed<<setprecision(5)<<ans;
return 0;
}
运行结果及报错内容
20<n<=2000范围内正确,其他全部错误
我的解答思路和尝试过的方法
本题我是想让中位数尽可能地小,比中位数小的数尽可能贴近中位数,比中位数大的尽可能大,这样价值最高。但为什么最小的数据范围也错了?
我想要达到的结果
/AC本题/