日期:2014-05-17  浏览次数:20897 次

【许久不见的STL和优先队列君】HDU1509——Windows Message Queue

     题目链接在此

     这个题可能是我找回状态的前奏,个人感觉。

     由于BFS至今不懂,推到了数组不懂,再往上推,还是对数据存储的结构不能烂熟于兄,所以会针对数组,栈,队列,链表等初等存储结构上下一些功夫,当然还有以后的树状数组,线段树,划分树,红黑树,总理树,ORZ树……等数据结构上进行一些练习。

     本题可以用数组或一般队列实现,但是鉴于本人的特色,选用了完全自主风格的优先队列,100%原创。

     题目大意是给出优先级,对文件进行操作,按照优先级输出,没有优先级的话,按照FIFO的顺序,输出(临时把队列变成栈了……),通过本题,本人对数据结构有了一些深层的理解,比如标个号后排序来使队列变栈……还有对自定义类的构造参数的理解,原来可以这么写……

    另:其实PRIOR_QUEUE有三种参数,但我只记得这一种了……

    4AC(解决栈的时候耗了些功夫):

   

#include <iostream>
#include <queue>
#include <string>
using namespace std;

class info
{
	public:
		string task;
		string attrib;
		int youxian;
		int wulinum;
		info(string a,string b,int c,int d):task(a),attrib(b),youxian(c),wulinum(d)
		{}
};

priority_queue<info> lineinfo;

bool operator < (const info &t1,const info &t2)
{
	if(t1.youxian==t2.youxian)
	{
		return t1.wulinum > t2.wulinum;
	}
	else
		return t1.youxian > t2.youxian;
}


int main()
{
	string command;
	int wulinum=0;
	while(cin>>command)
	{
		if(command=="GET")
		{
			if(lineinfo.empty())
			{
				cout<<"EMPTY QUEUE!"<<endl;
			}
			else
			{
				info tmp=lineinfo.top();
				cout<<tmp.task<<" "<<tmp.attrib<<endl;
				lineinfo.pop();
			}
		}
		if(command=="PUT")
		{
			string tmpls;
			string tmpattr;
			int prior;
			int lastpor=prior;
			cin>>tmpls>>tmpattr>>prior;
			
			
			lineinfo.push(info(tmpls,tmpattr,prior,wulinum));
			wulinum++;
		}
		
		
		
		
	}
		return 0;
}