zoukankan      html  css  js  c++  java
  • ACM解题之(ZOJ 2724)Windows Message Queue

    题目来源

    点击打开链接

    题目翻译

    消息队列是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;
    }

    【原创声明】转载请标明出处:https://www.cnblogs.com/surecheun/
  • 相关阅读:
    关于根据索引 删除队
    Vs 2012 编译C 语言
    动态绑定 dgvlist 列
    自定义控件闪烁问题
    程序员都不读书,但你应该读
    对于委托的理解 委托和事件
    ​label 中 文字的位置
    vs2010 折叠C/c++中的if
    关于动态创建控件性能提高 以及 SuspendLayout & ResumeLayout 的使用
    c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
  • 原文地址:https://www.cnblogs.com/surecheun/p/9648979.html
Copyright © 2011-2022 走看看