大家好,这道题目大体思路是这样的
100000的数据我用的贪心
题目要求平均数-中位数最大
就尽量让平均数大,中位数小
举个栗子
1 2 3 4 5 6 7 8 9 10
我们不会选择4 5 6 7 8 9
这样绝对不是答案
而是左边取i个,右边取i-1个(排完序后),这样中位数是x[i],平均数是比较大的
但是反例想不出来啊,各位大神帮帮忙,谢谢!
#include<bits/stdc++.h>
#define N 100009
using namespace std;
typedef long long ll;
double x[N],s[N],s2[N],ans=0;
ll n;
int main(){
cin>>n;
for(ll i=1;i<=n;++i) cin>>x[i];
sort(x+1,x+n+1);
for(ll i=1;i<=n;++i) s[i]=s[i-1]+x[i];
for(ll i=n;i>=1;--i) s2[i]=s2[i+1]+x[i];
for(ll i=1;i<=(n+1)/2;++i) ans=max(ans,(s[i]+s2[n-i+2])/(i*2-1)-x[i]);
printf("%.2lf",ans);
return 0;
}