看病要排队——优先队列初使用

 看病要排队

看病要排队这个是地球人都知道的常识。 
不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。 

现在就请你帮助医院模拟这个看病过程。

Input

输入数据包含多组测试,请处理到文件结束。 
每组数据第一行有一个正整数N(0<N<2000)表示发生事件的数目。 
接下来有N行分别表示发生的事件。 
一共有两种事件: 
1:"IN A B",表示有一个拥有优先级B的病人要求医生A诊治。(0<A<=3,0<B<=10)
2:"OUT A",表示医生A进行了一次诊治,诊治完毕后,病人出院。(0<A<=3)

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
参考代码如下(已AC):

 1 //思路:将结构体存入优先队列 
 2 #include<iostream>
 3 #include<queue>
 4 using namespace std;
 5 struct patient
 6 {
 7     int order;  //优先级 
 8     int id; //第几名
 9 };
10 bool operator<(const patient &a,const patient &b) //重载函数运算符<
11     {
12          if(a.order==b.order)
13          return a.id>b.id;
14          else
15          return a.order<b.order;
16      }
17 int main()
18 {
19     int n;
20     while(cin>>n)
21     {
22         priority_queue<patient>s[4]; //创建优先队列数组,每个数组下标代表一个医生
23         string act;
24         patient x;
25         int y=0; //记录病人编号 
26         while(n--)
27         {
28             
29             int a; //a是医生编号 
30             cin>>act>>a; //不需要getchar,cin读取字符串时遇空格和回车结束读取 
31             if(act=="IN")
32             {
33                 cin>>x.order;
34                 x.id=++y;
35                 s[a].push(x);
36             }
37             else if(act=="OUT")
38             {
39                 if(!s[a].empty())
40                 {
41                     
42                     cout<<s[a].top().id<<endl;
43                     s[a].pop();    
44                 }
45                 else
46                 {
47                     cout<<"EMPTY"<<endl;
48                 }
49             
50             }
51         }
52      } 
53 return 0;     
54     
55 }
View Code

猜你喜欢

转载自www.cnblogs.com/xiao0504/p/12623497.html
今日推荐