ACM看病要排队

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM看病要排队相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
输入样例:

7
IN 1 1
IN 1 2
OUT 1
OUT 2
IN 2 1
OUT 2
OUT 1
2
IN 1 1
OUT 1

输出样例:

2
EMPTY
3
1
1

/*
又学到了新东西:优先队列priority_queue 和重载运算符<
< 确定了此priority_queue的排列顺序:
该函数的意思是:
优先级一样的情况下,id大的是小的,所以排在后面
优先级不同的情况下,优先级小的是小的,所以排在后面
优先队列一般定义小于号的重载运算符,因为其本身默认的顺序是小于号
priority_queue a 等同于 priority_queue<int, vector, less > a;
*/

ps:优先队列是top不是front;

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

struct node
{
	int id;
	int yxj;
};
bool operator <(const node&a,const node&b)//重载运算符< 
{
	if(a.yxj==b.yxj) return a.id>b.id;
	else return a.yxj<b.yxj;
} 

int main()
{
	int n;
	int cnt=1;
	while(cin>>n)
	{
		getchar();
		cnt=1;
		priority_queue<node>q[4];
		while(n--)
		{
			string a;
			cin>>a;
			if(a[0]=='I')
			{
				int doc,y;
				cin>>doc>>y;
				node t;
				t.yxj=y;
				t.id=cnt;
				cnt++;
				q[doc].push(t);
			}
			
			else if(a[0]=='O')
			{
				int doc;
				cin>>doc;
				
				if(q[doc].size())
				{
					cout<<q[doc].top().id<<endl; //竟然是top 
					q[doc].pop();
				}
				else cout<<"EMPTY"<<endl;
				
			}
		}
	}
	
	return 0;
} 

以上是关于ACM看病要排队的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1873 看病要排队(优先级队列)

hdu1873-看病要排队-(结构体优先队列)

Hdu 1873 看病要排队

hdoj 1873 看病要排队

hdu1873看病要排队

hdu1873 看病要排队(结构体优先队列)