B3680 [语言月赛202211] BAN-PICK

题目描述

在第五人格职业联赛的每一场对局中,需要进行 Ban-Pick 流程。Ban 即角色禁用,Pick 即角色选用。

如试题 Winner 所述,游戏分为 求生者(SurvivorSurvivor) 与 监管者(HunterHunter) 两个阵营。求生者阵营 共有 n 名角色,监管者阵营 共有 m 名角色。

在某局比赛中,监管者 可以 ban(禁用) 掉 求生者阵营 5 名角色,求生者 可以 ban(禁用) 掉 监管者阵营 2 名角色。

每个角色,无论其属于求生者阵营还是监管者阵营,均可以使用 熟练度 来量化该阵营选手选择该角色的优先程度。选手一定会优先选择 熟练度 更高的角色进行游戏。

基于这样的考量,监管者选手 在进行 Ban 流程时,往往会选择 ban(禁用) 掉 求生者阵营熟练度最高 的若干名 求生者角色。同样,求生者选手 在进行 Ban 流程时,往往会选择 ban(禁用) 掉 监管者阵营熟练度最高 的若干名 监管者角色

在 Ban 流程完成后,需要执行 Pick 流程。

如试题 Winner 所述,求生者选手 需要从 求生者阵营 中选择 4 名不同的角色,监管者选手 需要从 监管者阵营 中选择 1 名角色。

现在告诉你所有角色的名字、阵营与选手对其熟练度,请你给出双方阵营 Pick 的角色名字。

输入格式

输入共 n+m+1 行。

输入的第一行为两个整数 n,m,分别代表求生者阵营角色数和监管者阵营角色数。

接下来 n+m 行,首先为一个仅由英文字母组成的字符串,代表该角色的姓名;接下来为一个大写字符 H 或 S,若为 H,则代表该角色为监管者阵营,若为 S,则代表该角色为求生者阵营;接下来一个正整数,代表该阵营选手对该角色的熟练度。上述字符串、大写字符、正整数之间由一个空格分隔。

输出格式

输出共 5 行。

输出的第一行为监管者阵营选择角色的角色名。

输出的第二到五行为求生者阵营选择角色的角色名,按照熟练度从高到低排列。

撕箓

首先建一个结构体,包括姓名和熟练度,下面在主程序里已经进行分区了,就不需要添加阵容变量,然后排序因为只会禁熟练度最高的几个(2和4)所以只需输出监管者(htr)的第3位和求生者(svr)的第6-9位就可以了。

禔碣

#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct role{
    string name;//姓名
    ll exp;//熟练度
}svr[100005],htr[100005];
ll cmp(role x,role y){
    return x.exp>y.exp;
}
int main()
{
    ll n,m,ss=1,hh=1;
    cin>>n>>m;
    for (int i=1;i<=n+m;i++) {
        string namel,campl;
        ll expl;
        cin>>namel>>campl>>expl;
        if (campl=="S") {//判断是那个阵营的
            svr[ss].name=namel;
            svr[ss].exp=expl;
            ss++;
        }
        else{
            htr[hh].name=namel;
            htr[hh].exp=expl;
            hh++;
        }
    }
    sort(svr+1,svr+1+n,cmp);//只需要浅浅的排序一下
    sort(htr+1,htr+1+n,cmp);
    cout<<htr[3].name<<endl;//然后输出没有被禁的最熟练的
    cout<<svr[6].name<<endl;
    cout<<svr[7].name<<endl;
    cout<<svr[8].name<<endl;
    cout<<svr[9].name<<endl;
    return 0;
}

P.S.

有人知道“玩玩第”是什么吗?就是是“玩不玩第五”读快了。

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值