题目来源:

点击打开链接

题目翻译

消息队列是windows系统的基本基础。对于每个进程,系统都维护一个消息队列。如果这个过程发生某些事情,例如鼠标点击,文本改变,系统会向队列添加一条消息。同时,如果不是空的,该过程将根据优先级值从队列中获取消息。请注意,优先级越低意味着优先级越高。在这个问题中,系统会要求您模拟消息队列,以便将消息放入消息队列并从中获取消息。

输入:
输入中只有一个测试用例。每行是一条命令,“GET”或“PUT”,意思是获取消息或放置消息。如果命令是“PUT”,则有一个字符串表示消息名称,两个整数表示参数和优先级。最多会有60000个命令。请注意,一条消息可能出现两次或更多,如果两条消息具有相同的优先级,则首先要求处理的消息将先被处理。处理结束文件。

输出:对于每个“GET”命令,输出从消息队列中获取的命令,其名称和参数在一行中。如果队列中没有消息,请输出“EMPTY QUEUE!”。 “PUT”命令没有输出。

例子:

(输入)

GET
PUT msg1 10 5
PUT msg2 10 4
GET
GET
GET

(输出)

EMPTY QUEUE!

msg2 10

msg1 10

EMPTY QUEUE!

解题:

我的思路是,定义一个信息结构,每个信息点包括信息的名字、信息的参数、信息的优先级以及信息的请求顺序。

加上信息的请求顺序主要是为了区别同一优先级的信息的先后处理顺序。然后把信息点放到一个优先队列中,优

先队列的先后顺序为:优先级越低越重要,同一优先级的话,信息请求顺序越前越重要。遇到put就进队列,遇

到get,就判断队列是否为空,若不空则出队输出,若空就打印为空。具体看代码:

/*
c++/accepted
*/

#include<iostream>
#include<queue>
#include<string>
using namespace std; struct node { //定义信息点结构
int n, p, num; //n为参数,p为优先级,num为输入顺序
string s;
bool friend operator < (node a, node b) { //定义信息点的大小函数
if (a.p == b.p) //优先级相等,就比较输入顺序
return a.n > b.n;
return a.p > b.p; //优先级不等,就比较优先级
}
}an;
int main() {
string ss;
priority_queue<node> q;
int k = 1;
while (cin>>ss) {
if (ss[0] == 'G') { //为get则拿信息
if (q.empty()) {//判断队列是否为空
cout<<"EMPTY QUEUE!"<<endl;
}
else {
an = q.top();
cout << an.s << " " << an.num << endl;
q.pop();
}
}
else { //存信息
cin >> an.s;
cin >> an.num;
cin >> an.p;
an.n = k;
k++;
q.push(an);
}
}
return 0;
}

ACM解题之(ZOJ 2724)Windows Message Queue的更多相关文章

  1. zoj 2724 Windows Message Queue

    Windows Message Queue Time Limit: 2 Seconds      Memory Limit: 65536 KB Message queue is the basic f ...

  2. zoj 2724 Windows Message Queue(使用priority_queue容器模拟消息队列)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2724 题目描述: Message queue is the b ...

  3. zoj 2724 Windows Message Queue 优先队列

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1724 题目大意: 给出两种操作,GET要求取出当前队首的元素,而PUT会输入名 ...

  4. ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...

  5. ZOJ 2724 Windows Message Queue (二叉堆,优先队列)

    思路:用优先队列 priority_queue,简单 两种方式改变队列 的优先级 (默认的是从大到小) #include<iostream> #include<queue> # ...

  6. hdu 1509 Windows Message Queue

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1509 Windows Message Queue Description Message queue ...

  7. hdoj 1509 Windows Message Queue【优先队列】

    Windows Message Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  8. Windows Message Queue(优先队列)

    欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Windows Message Queue Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  9. Windows Message Queue

    Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. 激活modelsim se 10.4 时运行patch_dll.bat不能生成TXT

    问题描述: 激活modelsim时运行patch_dll.bat总是在DOS界面一闪而过,不能生成LICENSE.TXT 问题解决: 先取消文件 mgls64.dll 的只读属性(这句话在README ...

  2. c++ [wrong]simple "Garbage Collector"

    In fact, Ptr alone can accomplish the task mentioned below. Implementation see Ptr.h, main2.cpp. In ...

  3. iOS使用AVCaptureSession自定义相机

    关于iOS调用摄像机来获取照片,通常我们都会调用UIImagePickerController来调用系统提供的相机来拍照,这个控件非常好 用.但是有时UIImagePickerController控件 ...

  4. ashx后门

    一.标准ASPX一句话木马 .NET平台下的一句话木马则百年不变,最常见的当属下面这句 <%@ Page Language=”Jscript”%><%eval(Request.Ite ...

  5. [Android]生成heap dump文件(.hprof)

    Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于A ...

  6. VLC WebPlugin中文

    Documentation:WebPlugin 这篇文档讲述的是 VLC media player Web plugins 和怎样在网页使用它 Contents 1 介绍: 构建包含video的Web ...

  7. tomcat的bin目录中startup.bat/tomcat.6.exe/tomcat6w.exe区别

    一.tomcat6.exe 与 startup.bat的区别 1.两者都可以用于启动Tomcat tomcat6.exe则是必须将tomcat注册Windows服务之后才可以用于启动tomcat服务; ...

  8. Easyui Datagrid扩展fixRownumber方法

    首先,从datagrid生成的代码,我们可以发现,在rowNumber上都有特定的class标记,datagrid-cell-rownumber,datagrid-header-rownumber. ...

  9. I.MX6 Ethernet MAC (ENET) MAC Address hacking

    /********************************************************************* * I.MX6 Ethernet MAC (ENET) M ...

  10. 用于ARM上的FFT与IFFT源代码-C语言

    /********************************************************************************* 程序名称:快速傅里叶变换(FFT) ...