HRBUST1313 火影忍者之~静音

火影忍者之~静音

 

传说中的火之国一年一度的公务员选拔又开始了!木叶忍者村此次也要从中选拔出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




——————————————————————————————————————————————————————————————

优先队列维护,把每轮参加的人压进队列,每轮弹出前5个,存进数组在排序。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;



struct node
{
    char name[25];
    int bi,zhan;
    bool friend operator<(node a,node b)
    {

        if(a.bi!=b.bi)
        return a.bi0;
    }
} p,fl[10005];

bool cmp(node a,node b)
{
    if(a.zhan!=b.zhan)
        return a.zhan>b.zhan;
    return strcmp(a.name,b.name)<0;
}

priority_queueq;

int main()
{
    int m,n;
    while(~scanf("%d%d",&m,&n))
    {
        while(!q.empty())
            q.pop();

        int cnt=0;
        for(int i=0; i




你可能感兴趣的:(----队列,HRBUST)