AcWing 1235. 付账问题
原题链接
中等
作者:
minmni
,
2021-04-17 22:12:50
,
所有人可见
,
阅读 325
题目描述
样例
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=500005;
int a[N];
double b[N];
int main(){
int n;
double s;
scanf("%d%lf",&n,&s);
double avg=s/n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
double marg=0.0;
int i;
for(i=0;i<n;i++){
if(a[i]<=avg){
marg+=abs(avg-a[i]);
b[i]=(double)(a[i]);
}
else{
break;
}
}
for( ;i<n;i++){
if(abs(a[i]-avg)<marg/(n-i)){
marg-=abs(a[i]-avg);
b[i]=(double)(a[i]);
}
else{
break;
}
}
int j=i;
for( ;i<n;i++){
b[i]=avg+marg/(n-j);
}
double sum=0;
for(i=0;i<n;i++){
sum+=(b[i]-avg)*(b[i]-avg);
}
sum=sqrt(sum/n);
printf("%.4lf",sum);
return 0;
}