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

ZBAA_MKC
基本退谷搬运于
2025-08-24 22:26:28,当前版本为作者最后更新于2021-06-15 21:00:46,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本题根据题意模拟即可。
使用三个数组存储名字,一个存储选票,一个存储票数。
用二层循环,验证每一个人的选票是否有效,如果有效就记录他选的是哪个人,无效就计入无效选票的张数。
最后排序后按要求输出即可。
一开始我一直用的
cin和printf的自带四舍五入但我发现总是会错个别的点(这题没有SPJ是真的恶心), 于是我就手写了四舍五入函数,然后就AC了。详情请见代码注释
#include <bits/stdc++.h> using namespace std; string s[15]; char c[1005][15]; int cnt[15]; int n, m; double sswr(int x) //四舍五入函数 { double ans = x * 1.0 / m; return floor(ans * 10000 + 0.5) / 100.0; } int main() { cin >> n >> m; int inv = 0; //储存无效票个数 for (int i = 1; i <= n; i++) { cin >> s[i]; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { cin >> c[i][j]; } } for (int i = 1; i <= m; i++) { int t = 0; int id; for (int j = 1; j <= n; j++) { if (c[i][j] == 'X') //验证每个人的票是否属于有效票 { t++; id = j; } } if (t != 1) //不是1就计入无效票 { inv++; } else { cnt[id]++; //有效就给他记上 } } for (int i = 1; i < n; i++) //手写冒泡排序,懒得写结构体 { for (int j = 1; j < n; j++) { if (cnt[j] < cnt[j + 1]) { swap(cnt[j], cnt[j + 1]); swap(s[j], s[j + 1]); } } } for (int i = 1; i <= n; i++) //输出(别忘换行) { cout << s[i] << " "; cout << sswr(cnt[i]) << "%" << endl; } //还有无效票别忘了 cout << "Invalid " << sswr(inv) << "%"; return 0; }
- 1
信息
- ID
- 6226
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者