题目来源:

点击打开链接

题目翻译

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

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

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

例子:

(输入)

  1. GET
  2. PUT msg1 10 5
  3. PUT msg2 10 4
  4. GET
  5. GET
  6. GET

(输出)

  1. EMPTY QUEUE!
  2. msg2 10
  3. msg1 10
  4. EMPTY QUEUE!

解题:

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

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

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

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

  1. /*
  2. c++/accepted
  3. */

  1. #include<iostream>
  2. #include<queue>
  3. #include<string>
  4. using namespace std;
  5. struct node { //定义信息点结构
  6. int n, p, num; //n为参数,p为优先级,num为输入顺序
  7. string s;
  8. bool friend operator < (node a, node b) { //定义信息点的大小函数
  9. if (a.p == b.p) //优先级相等,就比较输入顺序
  10. return a.n > b.n;
  11. return a.p > b.p; //优先级不等,就比较优先级
  12. }
  13. }an;
  14. int main() {
  15. string ss;
  16. priority_queue<node> q;
  17. int k = 1;
  18. while (cin>>ss) {
  19. if (ss[0] == 'G') { //为get则拿信息
  20. if (q.empty()) {//判断队列是否为空
  21. cout<<"EMPTY QUEUE!"<<endl;
  22. }
  23. else {
  24. an = q.top();
  25. cout << an.s << " " << an.num << endl;
  26. q.pop();
  27. }
  28. }
  29. else { //存信息
  30. cin >> an.s;
  31. cin >> an.num;
  32. cin >> an.p;
  33. an.n = k;
  34. k++;
  35. q.push(an);
  36. }
  37. }
  38. return 0;
  39. }

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. cpu分析简介

    进程占用CPU过高,一般有以下两种原因:          1.    业务量过大导致进程处理负荷高,占用CPU资源:2.    程序BUG导致,比如死循环:    初步查看cpu占用情况top进一步 ...

  2. Windows手动安装MySQL

    由于MySQL 5.6(也许5.5)以后去掉了Server Instance Configuration Wizard(服务实例配置向导),于是msi版变成了和zip版一样,要手动配置. * 假定安装 ...

  3. LINUX内核升级-更新网卡驱动

    因项目需要,将当前内核(2.6.32-220.el6.x86_64)升级到目标内核(2.6.33-110.el6.x86_64),但是编译的目标 内核(2.6.33-110.el6.x86_64)的对 ...

  4. 内核交互--procfs

    文档介绍:http://lxr.linux.no/linux+v2.6.37/Documentation/filesystems/proc.txt以下内容抄录linux设备驱动开发详解-宋宝华在/pr ...

  5. git忽略已经被提交的文件,以及如何恢复追踪

    问题描述 之前在提交代码时,.gitignore 没有填写完整,导致idea编辑器的配置文件夹.idea被提交了 然后每次运行本地项目,都会在.idea文件夹下生成一堆文件,这时发现问题,将.idea ...

  6. Struts2开发者模式

    在Struts2开发中,这应该是第一个学习配置的值.为了启用 Struts 2 的开发模式,可以通过自动配置显著增加Struts2的开发速度和属性文件加载,以及额外的日志和调试功能. 注:自动重新加载 ...

  7. makefile编写---.a静态库的生成和调用

    #.SUFFIXES: .c .o Cc =gcc #OSA=/data/users/osa IncDir=-I. -I./ Debug = -g Cflags = -c $(DEBUG) Libs ...

  8. android代码中自定义布局

    转载地址:http://blog.csdn.net/luckyjda/article/details/8760214RelativeLayout rl = new RelativeLayout(thi ...

  9. 这样就能用MathType编辑^符号

    大家都知道数学公式中的符号有很多,有些符号的名称还很多,比如,^这个字符,可以是乘方.插入符号.插入符.托字符等.所以一些用户在使用过程中有点搞不清,但是Mathtype的符号模板有很多种,基本可以满 ...

  10. HDU1087 Super Jumping! Jumping! Jumping! 最大连续递增子段

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...