您的位置:首页 > 产品设计 > UI/UE

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

2015-01-10 00:24 495 查看
题目大意:只有一组输入数据,每一行有一个请求组"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");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: