1 条题解
-
0
自动搬运
来自洛谷,原作者为

Dream__Sky
欲买桂花同载酒,终不似,少年游。便邀东风揽明月,春不许,再回头搬运于
2025-08-24 21:15:07,当前版本为作者最后更新于2023-06-19 19:25:30,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本题是一个纯模拟。
我们先根据公式算出每一个人的标准差,然后进行排序即可。
在算标准差时,我们知道,本题只需要一个大小排名,并不需要每个人准确的标准差。因此,我们不必算 ,只需要算出 即可,也不需要考虑精度问题。
注意几个问题:
-
最后最多也只需要输出 个人,需要判断。
-
排序有两个关键字,先按标准差,再按姓名的字典序。
-
算标准差时需要使用 double 类型的变量。
接下来,代码就好写了:
#include <bits/stdc++.h> using namespace std; int n,m; struct info { string name;//姓名 double sum;//标准差 }a[100001]; bool cmp(info x,info y) { return x.sum>y.sum//第一个关键字,标准差降序排序 ||(x.sum==y.sum&&x.name<y.name);//第二个关键字,当标准差相同时,字典序升序排序 } int main() { ios::sync_with_stdio(0);//本题建议使用IO优化 cin>>n>>m; for(int i=1;i<=n;i++) { int b[25]={0},sum=0;//用b数组记录第i个人的每科成绩,sum为分数和 cin>>a[i].name; for(int j=1;j<=m;j++) cin>>b[j],sum+=b[j]; double pjz=(sum*1.0)/(m*1.0);//求平均值,要考虑int转double的问题 for(int j=1;j<=m;j++) a[i].sum+=(pjz-b[j])*(pjz-b[j]);//可以简化成我这样 } sort(a+1,a+1+n,cmp);//排序 for(int i=1;i<=min(20,n);i++) cout<<a[i].name<<endl;//输出前20人 return 0; } -
- 1
信息
- ID
- 8510
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者