博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电 1873 看病要排队 (优先队列的应用)
阅读量:5741 次
发布时间:2019-06-18

本文共 2162 字,大约阅读时间需要 7 分钟。

Description

看病要排队这个是地球人都知道的常识。 
不过经过细心的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
1

先定义结构体存放病人的ID和生病的优先级,按生病的优先级排序,若优先级相同按先后顺序排序,再定义三个队列分别存放三个医生要看的病人,然后按优先级输出病人的ID。

1 #include
2 #include
3 #include
4 using namespace std; 5 struct st 6 { 7 int num; 8 int you; 9 bool friend operator <(st a,st b)10 {11 if(a.you != b.you) 12 return a.you
b.num;15 }16 } patient[2005];17 int main()18 {19 char type[5];20 int n,k,a;21 22 while(scanf("%d",&n)!=EOF)23 {24 priority_queue
doctor1;25 priority_queue
doctor2;26 priority_queue
doctor3;27 k=0;28 while(n--)29 { 30 scanf("%s",&type);31 if(type[0] == 'I')32 {33 k++;34 patient[k].num=k;35 scanf("%d %d",&a,&patient[k].you);36 if(a == 1)37 {38 doctor1.push(patient[k]);39 }40 else if(a == 2)41 {42 doctor2.push(patient[k]);43 }44 else45 {46 doctor3.push(patient[k]);47 }48 }49 else50 {51 scanf("%d",&a);52 if(a == 1)53 {54 if(doctor1.empty())55 {56 printf("EMPTY\n");57 }58 else59 {60 printf("%d\n",doctor1.top().num);61 doctor1.pop();62 }63 }64 else if(a == 2)65 {66 if(doctor2.empty())67 {68 printf("EMPTY\n");69 }70 else71 {72 printf("%d\n",doctor2.top().num);73 doctor2.pop();74 }75 }76 else77 {78 if(doctor3.empty())79 {80 printf("EMPTY\n");81 }82 else83 {84 printf("%d\n",doctor3.top().num);85 doctor3.pop();86 }87 }88 }89 }90 }91 }

 

转载于:https://www.cnblogs.com/yexiaozi/p/5706284.html

你可能感兴趣的文章
C++与MySQL的冲突
查看>>
siki学习之观察者模式笔记
查看>>
单元测试
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
用Bootstrap写一份简历
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
从零开始学习IOS,(UILabel控件)详细使用和特殊效果
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
7、设计模式-创建型模式-建造者模式
查看>>
Cesium官方教程11--建模人员必读
查看>>
我国古代的勾股定理
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
fopen打开文件失败的问题
查看>>
jQuery|元素遍历
查看>>