hdu 1873 看病要排队(优先级队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873
题目大意:
三个医生看病,病人排队看病,病人有优先级,优先级高的提前看病,同样的优先级按先后。IN A B : A医生有B病人。OUT A:A医生看完病人。输入看完病的病人是第几个来的。如果当前的医生没有看病人,输出“EMPYT”.
解题思路:
三个医生队列(优先队列:可以自动排序,解决了优先级问题),定义一个病人结构体,记录病人的顺序 key 和优先级priority,如果当前病人看1号医生,则当前病人入1号医生的队列,类推。
输出,如果1号医生输出,则取栈顶元素的key,同时出栈。如果栈顶为空,则输出“EMPTY”.
AC Code:
#include<bits/stdc++.h>
using namespace std;
struct Patient
{
int priority,key;
friend bool operator < (Patient p1,Patient p2)
{
if(p1.priority != p2.priority)
return p1.priority < p2.priority;
else
return p1.key > p2.key;
}
};
int main()
{
int n,k,doctorId;
Patient patient[];
char type[];
while(scanf("%d",&n)!=EOF)
{
priority_queue<Patient> Doctor1;
priority_queue<Patient> Doctor2;
priority_queue<Patient> Doctor3;
k=;
while(n--)
{
scanf("%s",type);
if(strcmp(type,"IN")==)
{
patient[k].key=k;
scanf("%d %d",&doctorId,&patient[k].priority);
if(doctorId==)
Doctor1.push(patient[k]);
else if(doctorId==)
Doctor2.push(patient[k]);
else Doctor3.push(patient[k]);
k++;
}
else if(strcmp(type,"OUT")==)
{
scanf("%d",&doctorId);
if(doctorId==)
if(Doctor1.empty())printf("EMPTY\n");
else printf("%d\n",Doctor1.top().key),Doctor1.pop();
else if(doctorId==)
if(Doctor2.empty())printf("EMPTY\n");
else printf("%d\n",Doctor2.top().key),Doctor2.pop();
else if(Doctor3.empty())printf("EMPTY\n");
else printf("%d\n",Doctor3.top().key),Doctor3.pop();
}
}
}
return ;
}
hdu 1873 看病要排队(优先级队列)的更多相关文章
- hdu 1873 看病要排队
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Description 看病要排队这个是地球人都知道的常识.不过经过细心的0068的 ...
- HDU 1873 看病要排队(优先队列)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 1873 看病要排队 优先队列
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- hdoj 1873 看病要排队【优先队列】
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 【优先队列】HDU 1873——看病找医生
来源:点击打开链接 看路径记录的BFS之前,再看一遍优先队列的用法. 优先队列的排序规则可以用运算符重载的方式完成,通常意义下,应该用friend bool operator <进行重载. #i ...
- hdu1873 看病要排队【优先队列】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Time Limit: 3000/1000 MS (Java/Others) ...
- hdu 1872(看病要排队)(优先队列)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU-1873 看病要排队(队列模拟)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 6438"Buy and Resell"(贪心+优先级队列)
传送门 •参考资料 [1]:HDU6438(优先队列+思维) •题意 有n个城市,第 i 天你会达到第 i 个城市: 在第 i 个城市中,你可以用 ai 元购买一个物品,或者用 ai 元卖掉一个物品, ...
随机推荐
- inheritableStatics 与statics类
/** * statics 可以包含类的静态和静态方法,但是不能被子类继承 * inheritableStatics 与statics类似但是可以被子类继承 */ Ext.onReady(functi ...
- SharedPreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它是Android数据持久化方法中最简单的一种. 其本质是基于XML文件存储key-value键值对数据,通常用 ...
- Android PNG透明图片转JPG格式背景变黑
Android PNG透明图片转JPG格式背景变黑 在上传图片是,需要把PNG格式转换成JPG格式的,但是在遇上透明背景时,转过来就变成黑色底图了! 原因是PNG支持透明图而 JPG格式不支持透明底 ...
- Swift 高阶函数
map.flatMap.filter和reduce,几乎实现lambda表达式的语言里都会在集合里增加这些方法, 见swift 学习(一)基础知识 (基本数据类型,操作符,流控制,集合)中的集合 ht ...
- mysql-拼接字段concat,concat_ws函数
Mysql的查询结果行字段拼接,可以用下面两个函数实现: 1. concat函数 mysql') from test ; +---------------------+ ') | +--------- ...
- 强制重启N种方法
强制重启N种方法 2015-12-24 17:19 146人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 驱动开发学习(458) 作者同类文章X 1. 无意中看到一种通过控制92H端口b ...
- js 身份验证
var idCardNoUtil = { provinceAndCitys: {11:"北京",12:"天津",13:"河北",14 ...
- 安装vmall5:从ebak恢复数据,需要配置php.ini
上传vmall5源码到服务器后访问ebak目录,发现网页不显示.用xshell登录到服务器手动执行ebak/index.php查看输出,发现这样一个错误: PHP Parse Error: synta ...
- ubuntu安装eclipse tomcat的参考网址
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined解决 - Linux操作系统:Ubuntu_Centos_D ...
- MFC 文件对话框
文件对话框的分类 文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框.例如,很多编辑软件像记事本等都有"打开"选项,选择" ...