HDU 1509 -- Windows Message Queue(优先队列)

来源:互联网 发布:爱知日语怎么样 编辑:程序博客网 时间:2024/05/29 02:29

题目大意:只有一组输入数据,每一行有一个请求组"GET" 或者 "PUT",当是”GET“时代表输出一条信息,包括信息的名字和它对应的参数,当是”PUT“时代表输入一条信息,输入信息的名字,参数及优先级;输出时的顺序判断方式是,当两个信息的优先级不同时,优先级小的先输出,如果两个信息的优先级相同,则按照他们进入队列的时间先后输出;

一个小顶堆优先队列的模板题。

代码实现:

#include<cstdio>#include<queue>using namespace std;struct Node{    int num;    int p;    int order;    char name[50];    Node(int a=0,int b=0,int c=0):num(a),p(b),order(c){}};bool operator<(Node a,Node b){    if(a.p==b.p) return a.order>b.order;    return a.p>b.p;}int main(){    char s[5];    Node ss;    priority_queue<Node>q;    int cnt=0;    while(~scanf("%s",s)){        if(s[0]=='P'){            cnt++;            scanf("%s%d%d",&ss.name,&ss.num,&ss.p);            ss.order=cnt;            q.push(ss);        }        if(s[0]=='G'){            if(!q.empty()){                ss=q.top();                q.pop();                printf("%s %d\n",ss.name,ss.num);            }            else printf("EMPTY QUEUE!\n");        }    }}

0 0
原创粉丝点击