https://www.acwing.com/problem/content/1237/
自己写的11个测试点过了十个,忘记开long double了很简单的一个题
//未ac
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
int a[N];
int main()
{
int n,s; cin>>n>>s;
double av=(double)s/n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
int i=1;double ans=0;
while(s)
{
double ave=(double)s/(n-i+1);
//cout<<ave<<' '<<av<<endl;
if(a[i]<ave)
{
s-=a[i];
ans=ans+(a[i]-av)*(a[i]-av);
i++;
}
else
{
s=0;
for(;i<=n;i++)
ans=ans+(ave-av)*(ave-av);
// while(ave<=a[i])
// {
// s-=a[i];
// ans=ans+(a[i]-av)*(a[i]-av);
// i++;
// }
}
}
ans/=n;
ans=sqrt(ans);
printf("%.4lf\n",ans);
return 0;
}
//ac
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
int n;
int a[N];
int main()
{
long double s;
cin>>n>>s;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
long double avg=s/n,ans=0;
for(int i=0;i<n;i++)
{
long double cur=s/(n-i);
// cout<<cur<<' '<<avg<<endl;
if(a[i]<cur) cur=a[i];
ans=ans+(cur-avg)*(cur-avg);
s-=cur;
}
printf("%.4Lf\n",sqrt(ans/n));
return 0;
}