hrbust 1313 火影忍者之~静音【优先队列STL+模拟】

描述了一个基于火影忍者的选拔赛程序设计问题,通过多轮选拔确定最终人选,涉及数据结构与算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

火影忍者之~静音
Time Limit: 1000 MSMemory Limit: 32767 K
Total Submit: 246(58 users)Total Accepted: 76(54 users)Rating: Special Judge: No
Description

传说中的火之国一年一度的公务员选拔又开始了!木叶忍者村此次也要从中选拔出5人来,作为即将上任的新火影纲手的小弟~,可是报考公务员的人数实在是太~~多啦!所以纲手的贴身随从—静音小姐,决定对这写人进行分m批的选拔,每次笔试n人,第一次选出5人,之后每次从这n人与之前参加笔试但未选中的人一起再选出分数最高的5人,如果分数相同则按名字的字典序选择,这样下来可以刷掉一大批人,但纲手只需要5人,这时候就轮到静音小姐的跟班小弟--卡卡西,来将这些人再进行二次筛选,卡卡西决定对这些人进行忍术测试,然后选出前5名,作为最后选出的人选,如果忍术分数相同,那么名字字典序靠前的被选中。

Input
首先是整数mn,表示要进行m波笔试,每波n人,然后是m组,每组n行,每行包括一个字符串与两个整数,表示一个人的名字和他的笔试分数以及他的忍术分数。输入到文件结束,m<=100,n<=100名字不长于20,分数不超过100.
Output
按顺序输出最后选出的5人的名字,每个名字占一行。(第一次选择的时候不需要考虑忍术成绩,第二次选择也不需要考虑笔试成绩)
Sample Input

1 6

abc 10 20

bcd 20 30

cde 30 40

def 40 50

efg 50 60

fgh 60 70

Sample Output

fgh

efg

def

cde

bcd

Source
2012 Spring Contest 3 - STL
Author
拂晓

题目大意:中文题意。

思路:输入进来m组每组n个人笔试的时候,我们使用优先队列模拟排序,每次取出前五个人加入一个数组里边,最后sort排序即可。注意字典序排序。

AC代码;

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
struct zuobiao
{
    char name[25];
    int bishi;int renshu;
    friend bool operator <(zuobiao a,zuobiao b)
    {
        if(a.bishi!=b.bishi)
        return a.bishi<b.bishi;
        if(a.bishi==b.bishi) return strcmp(a.name,b.name)>0;
    }
}now,ruxuan[1000];
int cmp(zuobiao a,zuobiao b)
{
    if(a.renshu!=b.renshu)
    return a.renshu>b.renshu;
    else return strcmp(a.name,b.name)<0;
}
int main()
{
    int m,n;
    while(~scanf("%d%d",&m,&n))
    {
        priority_queue<zuobiao>s;
        int cont=0;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                scanf("%s%d%d",now.name,&now.bishi,&now.renshu);
                s.push(now);
            }
            for(int j=0;j<5&&!s.empty();j++)
            {
                now=s.top();
                s.pop();
                ruxuan[cont++]=now;
            }
        }
        sort(ruxuan,ruxuan+cont,cmp);
        for(int i=0;i<5&&i<cont;i++)
        {
            printf("%s\n",ruxuan[i].name);
        }
    }
}
/*
1 6
abc 10 20
bcd 10 30
cde 10 40
def 10 50
efg 10 60
fgh 10 70
*/


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值