B3680 [语言月赛202211] BAN-PICK

· · 题解

B3680 [语言月赛202211] BAN-PICK 题解

Source & Knowledge

2022 年 11 月语言月赛,由洛谷网校入门计划/基础计划提供。

本题考察对字符串、结构体等的应用。

文字题解

题目大意

给定 n + m 组角色数据,每组数据包括角色名称、所属阵营、选手熟练度。

阵营分为求生者和监管者两类。依次输出监管者阵营中熟练度排名第三的角色名称,以及求生者阵营中熟练度排名第六至第九名的角色名称。

解析

我们使用一个结构体 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 为关键字由大到小对 sh 数组排序,按照规则输出对应的角色名称即可。


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;
}

视频题解

完整代码请在视频中查看。