HDU1873 看病要排队【模拟+优先队列】
看病要排队
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10332 Accepted Submission(s): 4353
Problem 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
Author
linle
Source
2008浙大研究生复试热身赛(2)——全真模拟
问题链接:HDU1873 看病要排队
问题简述:参见上文。
问题分析:这是一个需求与服务的问题,需要优先队列表示问题,剩下的就是模拟了。
程序说明:三个医生分别对应一个优先队列数组q[]的各个元素,其他都是套路。
题记:(略)
参考链接:(略)
AC的C++语言程序如下:
/* HDU1873 看病要排队 */#include <iostream>
#include <queue>using namespace std;const int N = 3;struct Node {int p; // 优先级int id; // 病人ID(序号)friend bool operator <(const Node &a,const Node &b) {return a.p == b.p ? a.id > b.id : a.p < b.p;}
};void solve(int n)
{priority_queue<Node> q[N];string op;int a, b, k;k = 0;for(int i=1; i<=n; i++) {cin >> op;if(op == "IN") {cin >> a >> b;q[a - 1].push({b, ++k});} else if(op == "OUT") {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) {solve(n);}return 0;
}
/* HDU1873 看病要排队 */#include <iostream>
#include <queue>using namespace std;const int N = 3;struct _node {int p; // 优先级int no; // 序号friend bool operator <(const _node &a,const _node &b) {if(a.p != b.p)return a.p < b.p;elsereturn a.no > b.no;}
};void solve(int n)
{priority_queue<_node> q[N];_node t;string op;int a, b, no;no = 0;for(int i=1; i<=n; i++) {cin >> op;if(op == "IN") {cin >> a >> b;t = {b, ++no};q[a - 1].push(t);} else if(op == "OUT") {cin >> a;if(q[a - 1].empty())cout << "EMPTY" << endl;else {t = q[a - 1].top();q[a - 1].pop();cout << t.no << endl;}}}
}int main()
{int n;while(cin >> n) {solve(n);}return 0;
}
HDU1873 看病要排队【模拟+优先队列】相关推荐
- 【HDU 1873 --- 看病要排队】优先队列
[HDU 1873 --- 看病要排队]优先队列 Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医 ...
- hdu1873 看病要排队-优先队列
Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的 ...
- 【HDU - 1873】 看病要排队(优先队列)
题干: 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人病情有轻重,所以不能根据简单 ...
- hdu1873 看病要排队哦
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU - 1873 看病要排队(优先队列)
看病要排队 #include<iostream> #include<queue> using namespace std; struct node {int x;//优先级 i ...
- 看病要排队 (hdu1873,优先队列)
看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人病情有轻重,所以不能根据简单的先来先 ...
- Java算法_优先队列和PriorityQueue——HDU 1873:看病要排队
目录 优先队列和PriorityQueue HDU 1873:看病要排队 java.util.Comparator 优先队列和PriorityQueue java.util.PriorityQueue ...
- 看病要排队(模拟做法)
明人不说暗话,直接先上题目(Problem - 1873 )看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少 ...
- hdu 1872(看病要排队)(优先队列)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
最新文章
- ElementUI el-time-picker-只显示小时、分钟,分并添加范围校验
- Creo二次开发--内存清理函数
- Linux Shell脚本去掉几类常见文件中的注释
- 仓库如何盘点 打印扫描一体PDA盘点机提升库存盘点效率
- php的两种复合数据类型是什么意思_2.4PHP复合数据类型:数组和对象
- JIL 编译与 AOT 编译
- vue eslint报错Expected linebreaks to be ‘LF‘ but found ‘CRLF‘
- Packt发布了2018年技能提升报告
- Java从零开始(4)——入门项目
- Jquery通过ajax加载json,jquery ajax json 异步加载数据
- 基于RS485通信的Modbus通信协议
- 淘宝淘口令n年前算法
- Ffmpeg实例,为视频添加一个循环播放的背景音乐(混声)
- smbrun - smbd和外部程序间的接口程序。
- 基于原生小程序精仿的猫眼电影(可预览)
- 几种基本的数字正则表达式[转]
- 5分钟理解边缘概率,联合概率,条件概率,随机事件独立,随机事件依赖
- Simulink学习笔记
- 淘宝获取商品历史价格信息 API 返回值说明
- python 实战(5)python 登录 爬自己脉脉好友数据
热门文章
- .NET——NPOI操作excel
- 计算机组成原理中EMAR是什么,计算机组成原理复习资料+试题
- //变量在scala中没有自增自减的操作
- android开发入门配置,Android开发入门——Andoird Studio的安装与配置
- qt截图怎样实现橡皮擦_利用QT实现截屏的四种方法
- python flask api部署_使用flask开发api——部署flask,使用gunicorn+gevent模式的http server...
- surface远程登录桌面字小_office365账号赠送(office桌面版+5Tonedrive)
- String, StringBuffer,StringBuilder
- Python中expected an indented block
- open cv+C++错误及经验总结(三)