济南教育论坛网站建设,wordpress英文变成中文,网站空间名词解释,毕设什么类型网站容易做Problem Description 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察#xff0c;他发现了医院里排队还是有讲究的。0068所去的医院有三个医生#xff08;汗#xff0c;这么少#xff09;同时看病。而看病的人病情有轻重#xff0c;所以不能根据简单的先来…Problem Description 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察他发现了医院里排队还是有讲究的。0068所去的医院有三个医生汗这么少同时看病。而看病的人病情有轻重所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高级别为1的优先权最低。医生在看病时则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话则选择最早来排队的病人。
现在就请你帮助医院模拟这个看病过程。
Input 输入数据包含多组测试请处理到文件结束。 每组数据第一行有一个正整数N(0N2000)表示发生事件的数目。 接下来有N行分别表示发生的事件。 一共有两种事件 1:“IN A B”,表示有一个拥有优先级B的病人要求医生A诊治。(0A3,0B10) 2:“OUT A”,表示医生A进行了一次诊治诊治完毕后病人出院。(0A3)
Output 对于每个OUT A事件请在一行里面输出被诊治人的编号ID。如果该事件时无病人需要诊治则输出EMPTY。 诊治人的编号ID的定义为在一组测试中IN A B事件发生第K次时进来的病人ID即为K。从1开始编号。
Sample Input
7 IN 1 1 IN 1 2 OUT 1 OUT 2 IN 2 1 OUT 2 OUT 1 2 IN 1 1 OUT 1
Sample Output
2 EMPTY 3 1 1
解题思路 优先队列模拟看病过程。
代码如下
#include iostream
#include queue
#include string
using namespace std;struct node {int p;int id;friend bool operator(const node a, const node b) {if (a.p b.p)return a.id b.id;//优先级一样时id小的优先级高elsereturn a.p b.p;}
};void ans(int n) {int k 0;priority_queuenodeq[5];string str;for (int i 1; i n; i) {cin str;if (str IN) {int a, b;cin a b;q[a - 1].push({b, k});} else if (str OUT) {int a;cin a;if (q[a - 1].empty())cout EMPTY endl;else {cout q[a - 1].top().id endl;q[a - 1].pop();}}}
}int main() {int n;while (cin n) {ans(n);}return 0;
}