1 条题解

  • 0
    @ 2025-8-24 21:14:22

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Maxmilite
    **

    搬运于2025-08-24 21:14:21,当前版本为作者最后更新于2022-11-27 13:42:21,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


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

    Source & Knowledge

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

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

    文字题解

    题目大意

    给定 n+mn + 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;
    }
    

    视频题解

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

    • 1

    信息

    ID
    8109
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者