HDU-1873 题解
看病要排队
题目大意
模拟医院看病
每个病人有两个属性,优先级和序号
每次看病先看优先级高的,同优先级看先来后到
Time: 1000 ms
Memory: 32768 kB
解题思路及分析
优先队列
注意同优先级的处理,毕竟堆排序不稳定
AC代码
#include <bits/stdc++.h>
using namespace std;
struct PQ
{
int id;
int prio;
PQ() { }
PQ(int n, int p) {
id = n;
prio = p;
}
};
bool operator<(PQ a, PQ b)
{
if (a.prio == b.prio)
return a.id > b.id;
return a.prio < b.prio;
}
int main()
{
ios::sync_with_stdio(false);
int n;
while (cin >> n)
{
int a, b;
priority_queue<PQ> pq[5];
string s;
int id = 1;
while (n--)
{
cin >> s;
if (s == "IN")
{
cin >> a >> b;
pq[a].push(PQ(id, b));
id++;
}
if (s == "OUT")
{
cin >> a;
if (!pq[a].empty())
{
cout << pq[a].top().id << endl;
pq[a].pop();
}
else
{
cout << "EMPTY" << endl;
}
}
}
}
return 0;
}