ACM解题之(ZOJ 2724)Windows Message Queue
题目来源:
点击打开链接
题目翻译:
消息队列是windows系统的基本基础。对于每个进程,系统都维护一个消息队列。如果这个过程发生某些事情,例如鼠标点击,文本改变,系统会向队列添加一条消息。同时,如果不是空的,该过程将根据优先级值从队列中获取消息。请注意,优先级越低意味着优先级越高。在这个问题中,系统会要求您模拟消息队列,以便将消息放入消息队列并从中获取消息。
输出:对于每个“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的更多相关文章
- zoj 2724 Windows Message Queue
Windows Message Queue Time Limit: 2 Seconds Memory Limit: 65536 KB Message queue is the basic f ...
- zoj 2724 Windows Message Queue(使用priority_queue容器模拟消息队列)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2724 题目描述: Message queue is the b ...
- zoj 2724 Windows Message Queue 优先队列
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1724 题目大意: 给出两种操作,GET要求取出当前队首的元素,而PUT会输入名 ...
- ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...
- ZOJ 2724 Windows Message Queue (二叉堆,优先队列)
思路:用优先队列 priority_queue,简单 两种方式改变队列 的优先级 (默认的是从大到小) #include<iostream> #include<queue> # ...
- hdu 1509 Windows Message Queue
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1509 Windows Message Queue Description Message queue ...
- hdoj 1509 Windows Message Queue【优先队列】
Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- Windows Message Queue(优先队列)
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Mem ...
- Windows Message Queue
Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- SPOJ QTREE3 lct
题目链接 题意: 给定n个点 q个询问 以下n-1行给出树边,点有黑或白色.初始化为白色 以下q行: 询问有2种: 1. 0 x 把x点黑变白,白变黑 2.1 x 询问Path(1,x)路径上第一个黑 ...
- Spring mvc 注解@ResponseBody 返回内容编码问题
@ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...
- leetcode_Power of Two_easy
Given an integer, write a function to determine if it is a power of two. 题目意思:推断某个数是否是2的幂. 方法:直接进行bi ...
- java继承机制
1 继承 关键字:extends java没有多重继承 实例 父类: package unit4; public class Base { public int publicVarofBase= ...
- cf #363 d
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output stan ...
- Cassandra第一次使用
在FreeBSD上安装Cassandra: # pkg install cassandra2找了半天Cassandra的配置文件,原来安装位置是在这: /usr/local/share/cassand ...
- hdu5794 A Simple Chess 容斥+Lucas 从(1,1)开始出发,每一步从(x1,y1)到达(x2,y2)满足(x2−x1)^2+(y2−y1)^2=5, x2>x1,y2>y1; 其实就是走日字。而且是往(n,m)方向走的日字。还有r个障碍物,障碍物不可以到达。求(1,1)到(n,m)的路径条数。
A Simple Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 整合Thinkphp数据库基本操作CURD,界面datagrid采用EasyUi的Demo
1 <?php 2 class CurdAction extends Action{ 3 public function del($id){ 4 ...
- fedora上安装sun jdk
系统被来就有openjdk,但是开发工具需要sun的jdk,于是下载一个压缩包并解压到一个位置.使用alternative命令切换 alternatives --.0_79/jre/bin/java ...
- AndroidHttpClient和HttpEntity详解
AndroidHttpClient结构: public final class AndroidHttpClient extends Object implements HttpClient 前言:这类 ...