hdu 1509

来源:互联网 发布:优化设计方案的方法有 编辑:程序博客网 时间:2024/05/26 20:21
题目大意:

是当输入PUT时,接收一个msg的名称,参数和优先级,将它放在队列尾,当输入GET时,如果队列是空的,输出EMPTY QUEUE!,如果非空,输出优先级最高的那条msg的名称和参数(也就是数值最小的),并把它从队列里删除。


解题思路:

1)这道题根据输出中包含“queue”,那么我们可以考虑一下使用queue(队列)来解决这个问题。然而在队列中,要出现后进先出的情况,这时我们便可以考虑使用优先队列来解决这个问题。。。。

2)。在这里,我对这个比较函数有一些自己的看法(可能不正确).其实,return a<b

,这个意思应该是“维持默认的排序方式”,而在一般情况下,默认的排序方式即为升序。而return a  > b则表示采用相反于默认排序的方式进行排序。

在优先队列中,默认的排序方式是降序排序。


AC代码如下:

/* * 1509_1.cpp * *  Created on: 2013年8月7日 *      Author: Administrator */#include <iostream>#include <queue>using namespace std;struct Node{string name;int val;int priority;int num;friend bool operator<(Node a , Node b){if(a.priority != b.priority){//先输出优先级高的(即priority小的)return b.priority < a.priority;}//用来实现当优先级相同时根据进队顺序输出的功能return b.num < a.num;}};int main(){priority_queue<Node> q;Node cur , next;string str;int k = 0;while(cin >> str){if( str == "GET"){if(q.empty()){cout<<"EMPTY QUEUE!"<<endl;}else{cur = q.top();q.pop();cout<<cur.name<<" "<<cur.val<<endl;}}else{cin>>next.name>>next.val>>next.priority;//用来标记进队顺序,先进的num值小next.num = k++;q.push(next);}}}