AcWing 1235. 付账问题
原题链接
中等
作者:
hl_lucky
,
2025-03-22 20:44:24
·贵州
,
所有人可见
,
阅读 2
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 5*1e5 + 10;
typedef long long LL;
LL n,m,S;
LL a[N];
int main(){
cin>>n>>S;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
double avg = (double)S / n;
double sum_low = 0.0;
double sum_sq = 0.0;
m = n;
for(int i=0;i<n;i++){
double current_avg = (double)(S - sum_low) / m;
if(a[i] < current_avg){
sum_low += a[i];
double wc = a[i] - avg;
sum_sq += wc*wc;
m--;
}
else{
break;
}
}
if(m){
double current_avg = (double)(S - sum_low) / m;
double wc = current_avg - avg;
sum_sq += m*wc*wc;
}
double variance = (double)sum_sq / n;
double stand = sqrt(variance);
printf("%.4lf\n",stand);
return 0;
}