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看病要排队的主要内容,如果未能解决你的问题,请参考以下文章