hdu 优先队列

  1. /*
  2. Problem Description
  3. 看病要排队这个是地球人都知道的常识。
  4. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。
  5. 现在就请你帮助医院模拟这个看病过程。
  6. Input
  7. 输入数据包含多组测试,请处理到文件结束。
  8. 每组数据第一行有一个正整数N(0<N<2000)表示发生事件的数目。
  9. 接下来有N行分别表示发生的事件。
  10. 一共有两种事件:
  11. 1:"IN A B",表示有一个拥有优先级B的病人要求医生A诊治。(0<A<=3,0<B<=10)
  12. 2:"OUT A",表示医生A进行了一次诊治,诊治完毕后,病人出院。(0<A<=3)
  13. Output
  14. 对于每个"OUT A"事件,请在一行里面输出被诊治人的编号ID。如果该事件时无病人需要诊治,则输出"EMPTY"。
  15. 诊治人的编号ID的定义为:在一组测试中,"IN A B"事件发生第K次时,进来的病人ID即为K。从1开始编号。
  16. */
  17. #include <queue>
  18. #include <iostream>
  19. #include <string>
  20. using namespace std;
  21. struct node
  22. {
  23. string in;
  24. int A,B;
  25. int count;
  26. };
  27. struct cmp
  28. {
  29. bool operator() (const node &a, const node &b)
  30. {
  31. if (a.B > b.B)
  32. return false;
  33. else if(a.B ==b.B)
  34. return (a.count > b.count);
  35. else
  36. return true;
  37. }
  38. };
  39. int main()
  40. {
  41. int n;
  42. while(cin>>n)
  43. {
  44. node temp;
  45. priority_queue <node, vector<node>, cmp> que1;
  46. priority_queue <node, vector<node>, cmp> que2;
  47. priority_queue <node, vector<node>, cmp> que3;
  48. int a=0;
  49. while(n--)
  50. {
  51. cin>>temp.in;
  52. if(temp.in=="IN")
  53. cin>>temp.A>>temp.B;
  54. if(temp.in=="OUT")
  55. cin>>temp.A;
  56. if(temp.in=="IN")
  57. {
  58. switch (temp.A)
  59. {
  60. case 1:{temp.count=++a;que1.push(temp);break;}
  61. case 2:{temp.count=++a;que2.push(temp);break;}
  62. case 3: {temp.count=++a;que3.push(temp);break;}
  63. }
  64. }
  65. if(temp.in=="OUT")
  66. {
  67. switch (temp.A)
  68. {
  69. case 1:{if(que1.empty() ) {cout<<"EMPTY"<<endl;break;} else {cout<<que1.top().count<<endl;que1.pop();break;} }
  70. case 2:{if(que2.empty() ) {cout<<"EMPTY"<<endl;break;} else {cout<<que2.top().count<<endl;que2.pop();break;} }
  71. case 3:{if(que3.empty() ) {cout<<"EMPTY"<<endl;break;} else {cout<<que3.top().count<<endl;que3.pop();break;} }
  72. }
  73. }
  74. }
  75. }
  76. return 0;
  77. }

来自为知笔记(Wiz)

附件列表

时间: 2024-10-10 02:45:13

hdu 优先队列的相关文章

[ACM] hdu 1242 Rescue (BFS+优先队列)

Rescue Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is:

HDU - 3790 最短路径问题(Dijkstra+优先队列优化)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题意:中文题(边被赋予两种属性,一种是路径,一种是花费),然后略.(逃...... 今天看了卿学姐的视频,初尝SPFA和Dijkstra. 一个是用队列优化,一个是用优先队列优化.这道题目用这两种方法都可以. dijkstra算法思想(贪心):从距离起点最近的点开始,从这个点遍历一遍它周围的点,进行松弛操作,直到最终点. 整个的算法思想就是贪心,每次都给它形成最短路. 这道题目值得注意的是预处

hdu 1242 Rescue(bfs+优先队列)

Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is: approach Angel. We assume

HDU 3152 Obstacle Course(BFS+优先队列 重载)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3152 Problem Description You are working on the team assisting with programming for the Mars rover. To conserve energy, the rover needs to find optimal paths across the rugged terrain to get from its sta

HDU 5638 拓扑排序+优先队列

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序的算法稍微改一下,如果某个顶点的入度小于k也把它加到优先队列里面去. k减小后队列里面会有些点不满足<=k,直接踢出来就好了. 代码: #include<iostream> #include<cstring> #include<cstdio> #include<

hdu 5437 Alisha’s Party (优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=5437 题目意思比较好理解,如果暴力的话或超时,可以考虑到用优先队列就可以很简单的解决问题 1 #include<queue> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 struct point { 7 int x,id; 8 char na[2

hdu 1242 Rescue (BFS+优先队列)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1242 这道题目我是用BFS+优先队列做的.听说只用bfs会超时. 因为这道题有多个营救者,所以我们从被营救者开始bfs,找到最近的营救者就是最短时间. 先定义一个结构体,存放坐标x和y,还有到达当前点(x,y)消耗的时间. struct node { int x,y; int time; friend bool operator < (const node &a,const node &

hdu 2102 A计划 详细题解 (BFS+优先队列)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 开始看到四分之一的AC率感觉有点吓人,后来一做感觉就是模板改了点东西而已,一遍就AC了,不过在主函数和全局变量里面都定义了n和m导致我白白浪费了debug的时间.果然全局变量得小心用啊. 跟模板一样的,定义一个结构体,只不过多加了个参数,就是迷宫的层数,我用0代表第一层,1代表第二层,这在数组里面会体现的. struct node { int index;//层数

HDU 1102 Constructing Roads, Prim+优先队列

题目链接:HDU 1102 Constructing Roads Constructing Roads Problem Description There are N villages, which are numbered from 1 to N, and you should build some roads such that every two villages can connect to each other. We say two village A and B are conne