日期:2014-05-17 浏览次数:20897 次
题目链接在此
这个题可能是我找回状态的前奏,个人感觉。
由于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; }