本文共 1031 字,大约阅读时间需要 3 分钟。
第一行包含两个整数 n、S;
第二行包含 n 个非负整数 a1, …, an。输出最小的标准差,四舍五入保留 4 位小数。
1≤n≤5×105,
0≤ai,S≤1095 2333
666 666 666 666 6660.0000
10 30
2 1 4 7 4 8 3 6 4 70.7928
我们都知道所取得的数与平均数越接近,标准差越小.这道题我们先将所有数排序,先算出每个人应该出多少钱,然后我们从前往后枚举每个人能付的钱,如果钱不够,那么多出来的钱需要后面的人去付.钱够的话就支付平均数就可以.所以我们只需要遍历每次支付的钱,还有剩下需要支付的钱就可以了.
#include#include #include #include #include using namespace std;const int maxn=5e5+5;int a[maxn];int n;double k;int main(){ cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; double avg=k/n,s=k;//s为剩下需要支付的钱 double res=0; sort(a+1,a+1+n); for(int i=1;i<=n;i++) { double z=s/(n-i+1); if(a[i]
转载地址:http://rqagz.baihongyu.com/