B3680 [语言月赛202211] BAN-PICK
B3680 [语言月赛202211] BAN-PICK 题解
Source & Knowledge
2022 年 11 月语言月赛,由洛谷网校入门计划/基础计划提供。
本题考察对字符串、结构体等的应用。
文字题解
题目大意
给定
阵营分为求生者和监管者两类。依次输出监管者阵营中熟练度排名第三的角色名称,以及求生者阵营中熟练度排名第六至第九名的角色名称。
解析
我们使用一个结构体 node 存储角色的名称和熟练度。
struct node {
string name;
long long val;
} s[100005], h[100005];
至于阵营分类问题,我们可以在读入的时候解决,代码如下:
int cntH = 0, cntS = 0;
cin >> n >> m;
for (int i = 1; i <= n + m; ++i) {
string name, v;
long long val;
cin >> name >> v >> val;
if (v == "H") {
++cntH;
h[cntH].name = name;
h[cntH].val = val;
} else {
++cntS;
s[cntS].name = name;
s[cntS].val = val;
}
}
这之后,我们以 val 为关键字由大到小对 s 和 h 数组排序,按照规则输出对应的角色名称即可。
int cmp(node x, node y) {
return x.val > y.val;
}
sort(s + 1, s + cntS + 1, cmp);
sort(h + 1, h + cntH + 1, cmp);
cout << h[3].name << endl;
for (int i = 6; i <= 9; ++i) {
cout << s[i].name << endl;
}
视频题解
完整代码请在视频中查看。