看病要排队

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5795    Accepted Submission(s):
2384

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
  1. /*
  2. * 利用优先队列来将最大的优先权的患者
  3. * 输出
  4. * 不太会用优先队列参考了别人代码
  5. * 还写得不简洁 惭愧
  6. *
  7. */
  8. #include<stdio.h>
  9. #include<string.h>
  10. #include<algorithm>
  11. #include<queue>
  12. using namespace std;
  13. struct node1
  14. {
  15. int time1;
  16. int pat1;
  17. friend bool operator < (node1 a,node1 b)
  18. {
  19. if(a.pat1!=b.pat1)
  20. return a.pat1<b.pat1;
  21. else
  22. return a.time1>b.time1;
  23. }
  24. };
  25. int main()
  26. {
  27. int n,m,t,k,a;
  28. char s1[10];
  29. char str1[5]={"IN"};
  30. while(scanf("%d",&t)!=EOF)
  31. {
  32. priority_queue<node1>q1;//医生1的看病情况
  33. priority_queue<node1>q2;//医生2
  34. priority_queue<node1>q3;//医生3
  35. node1 x1;//定义结构体名
  36. node1 x2;
  37. node1 x3;
  38. k=1;
  39. while(t--)
  40. {
  41. scanf("%s",s1);
  42. if(s1[0]=='I')
  43. {
  44. scanf("%d%d",&n,&m);
  45. if(n==1)
  46. {
  47. x1.time1=k;
  48. x1.pat1=m;
  49. q1.push(x1);
  50. }
  51. else if(n==2)
  52. {
  53. x2.time1=k;
  54. x2.pat1=m;
  55. q2.push(x2);
  56. }
  57. else if(n==3)
  58. {
  59. x3.time1=k;
  60. x3.pat1=m;
  61. q3.push(x3);
  62. }
  63. k++;
  64. }
  65. else
  66. {
  67. scanf("%d",&a);
  68. if(a==1)
  69. {
  70. if(q1.empty())
  71. printf("EMPTY\n");
  72. else
  73. {
  74. x1=q1.top();
  75. printf("%d\n",x1.time1);
  76. q1.pop();
  77. }
  78. }
  79. else if(a==2)
  80. {
  81. if(q2.empty())
  82. printf("EMPTY\n");
  83. else
  84. {
  85. x2=q2.top();
  86. printf("%d\n",x2.time1);
  87. q2.pop();
  88. }
  89. }
  90. else if(a==3)
  91. {
  92. if(q3.empty())
  93. printf("EMPTY\n");
  94. else
  95. {
  96. x3=q3.top();
  97. printf("%d\n",x3.time1);
  98. q3.pop();
  99. }
  100. }
  101. }
  102. }
  103. }
  104. return 0;
  105. }

  

  

hdoj 1873 看病要排队【优先队列】的更多相关文章

  1. HDU 1873 看病要排队 优先队列

    Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  2. hdu 1873 看病要排队

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Description 看病要排队这个是地球人都知道的常识.不过经过细心的0068的 ...

  3. HDU 1873 看病要排队(优先队列)

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. hdu1873 看病要排队 优先队列

    看病要排队 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  5. HDUOj 看病要排队 优先队列的使用 题目1873

    STL优先队列的具体描写叙述 http://blog.csdn.net/yueloveme/article/details/47106639 题目地址:http://acm.hdu.edu.cn/s ...

  6. hdu 1873 看病要排队(优先级队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题目大意: 三个医生看病,病人排队看病,病人有优先级,优先级高的提前看病,同样的优先级按先后.I ...

  7. HDU1873 看病要排队 —— 优先队列(STL)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题解: 题目已经说出了解题方法:优先队列.但是之前没有学过优先队列,而且这题还是在现场赛做的.由 ...

  8. hdu1873 看病要排队【优先队列】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Time Limit: 3000/1000 MS (Java/Others)     ...

  9. hdu1837 看病要排队(优先队列)

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 构建 shiro struts2 spring3 mybatis 的maven项目

    书接上回 构建 struts2 spring3 mybatis 的maven项目 构建 pom.xml 继续在原有框架下 融合shiro ,具体shiro是啥 这里就不解释了,恩 反正功能挺强大的 本 ...

  2. UEditor富文本编辑框学习

    1.首先需要引入CSS.JS <!--富文本编辑框--> <link href="${pageContext.request.contextPath}/css/plugin ...

  3. Java源代码分析与生成

    源代码分析:可使用ANTLRANTLR是开源的语法分析器,可以用来构造自己的语言,或者对现有的语言进行语法分析. JavaParser 对Java代码进行分析 CodeModel 用于生成Java代码 ...

  4. 【技巧】DataGridView,ListView重新绑定时保持上次滚动位置

    (1)DataGridView 今天在项目时遇到一个问题,将DataTable绑定到DataGridView,其中一列为CheckBox列,当我修改该列值时,触发CellValueChanged事件. ...

  5. 工作流(worfflow)

    -- 工作流(Workflow)就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期的业务 ...

  6. HDU 1166 敌兵布阵 线段树的基本应用——动态区间和问题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=1166 简单题,1A了,这个好像就是传说中的“点树”. 设当前结点表示线段[left, right],编号 ...

  7. MVC引用CSS文件の正确姿势

    你的css文件目录结构: 将路径写入BundleConfig规则中: using System.Web; using System.Web.Optimization; namespace XXXX { ...

  8. WebService学习整理(一)——客户端三种调用方式整理

    1 WebService基础 1.1 作用 1,       WebService是两个系统的远程调用,使两个系统进行数据交互,如应用: 天气预报服务.银行ATM取款.使用邮箱账号登录各网站等. 2, ...

  9. 【转】WPF中的Binding技巧(二)

    WPF中的Binding技巧(二)     接上篇, 我们来看一看Elementname,Source,RelativeSource 三种绑定的方式 1.ElementName顾名思义就是根据Ui元素 ...

  10. ORACLE 定时任务JOB

    http://www.cnblogs.com/xclw/archive/2009/12/04/1616945.html