杭电1873题 看病要排队

举报
Linux猿 发表于 2021/08/05 23:28:20 2021/08/05
【摘要】 题目链接~~> 这题是接触优先队列的第二题代码有点。。。 开始做时一直wa,最后才明白应该把 priority_queue<zha>q1; 等放到循环里面去,。。。 代码: #include<stdio.h>#include<string.h>#include<queue>using namespace...

题目链接~~>

这题是接触优先队列的第二题代码有点。。。

开始做时一直wa,最后才明白应该把 priority_queue<zha>q1;

等放到循环里面去,委屈。。。

代码:


  
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. using namespace std;
  5. struct zha
  6. {
  7. int a1;
  8. int h1;
  9. friend bool operator<(const zha &a,const zha &b)
  10. {
  11. if(a.a1!=b.a1)
  12. return a.a1 < b.a1 ;
  13. else return a.h1 > b.h1;
  14. }
  15. };
  16. struct zhan
  17. {
  18. int a2;
  19. int h2;
  20. friend bool operator<(const zhan &a,const zhan &b)
  21. {
  22. if(a.a2!=b.a2)
  23. return a.a2 < b.a2 ;
  24. else return a.h2 > b.h2;
  25. }
  26. };
  27. struct zhang
  28. {
  29. int a3;
  30. int h3;
  31. friend bool operator<(const zhang &a,const zhang &b)
  32. {
  33. if(a.a3!=b.a3)
  34. return a.a3 < b.a3 ;
  35. else return a.h3 > b.h3;
  36. }
  37. };
  38. int main()
  39. {
  40. char s[10];
  41. int T,n1,n2;int k;
  42. while(scanf("%d",&T)!=EOF)
  43. {
  44. priority_queue<zha>q1;
  45. priority_queue<zhan>q2;
  46. priority_queue<zhang>q3;
  47. zha current1;
  48. zhan current2;
  49. zhang current3;
  50. k=1;
  51. while(T--)
  52. {
  53. scanf("%s",s);
  54. if(s[0]=='I')
  55. {
  56. scanf("%d%d",&n1,&n2);
  57. if(n1==1)
  58. {
  59. current1.a1=n2;
  60. current1.h1=k;
  61. q1.push(current1);
  62. }
  63. else if(n1==2)
  64. {
  65. current2.a2=n2;
  66. current2.h2=k;
  67. q2.push(current2);
  68. }
  69. else if(n1==3)
  70. {
  71. current3.a3=n2;
  72. current3.h3=k;
  73. q3.push(current3);
  74. }
  75. k++;
  76. }
  77. else {
  78. scanf("%d",&n1);
  79. if(n1==1)
  80. {
  81. if(q1.empty())
  82. {
  83. printf("EMPTY\n");
  84. }
  85. else {
  86. current1=q1.top();
  87. printf("%d\n",current1.h1);
  88. q1.pop();
  89. }
  90. }
  91. else if(n1==2)
  92. {
  93. if(q2.empty())
  94. {
  95. printf("EMPTY\n");
  96. }
  97. else {
  98. current2=q2.top();
  99. printf("%d\n",current2.h2);
  100. q2.pop();
  101. }
  102. }
  103. else if(n1==3)
  104. {
  105. if(q3.empty())
  106. {
  107. printf("EMPTY\n");
  108. }
  109. else {
  110. current3=q3.top();
  111. printf("%d\n",current3.h3);
  112. q3.pop();
  113. }
  114. }
  115. }
  116. }
  117. }
  118. return 0;
  119. }

别人代码:


  
  1. /*********************************
  2. * 日期:2013-3-16
  3. * 作者:SJF0115
  4. * 题号: HDU 题目1873: 看病要排队
  5. * 来源:http://acm.hdu.edu.cn/showproblem.php?pid=1873
  6. * 结果:AC
  7. * 来源:2008浙大研究生复试热身赛(2)——全真模拟
  8. * 总结:
  9. **********************************/
  10. #include<iostream>
  11. #include<stdio.h>
  12. #include<queue>
  13. using namespace std;
  14. struct Patient
  15. {
  16. //值
  17. int priority;
  18. //编号
  19. int key;
  20. //重载操作符
  21. friend bool operator < (Patient p1,Patient p2)
  22. {
  23. if(p1.priority != p2.priority){
  24. return p1.priority < p2.priority;
  25. }
  26. else{
  27. return p1.key > p2.key;
  28. }
  29. }
  30. };
  31. int main(){
  32. int i,N,k;
  33. char Type[4];
  34. int DoctorID,PatientID;
  35. Patient patient[2001];
  36. while(scanf("%d",&N) != EOF){
  37. //定义三个医生
  38. priority_queue<Patient> Doctor1;
  39. priority_queue<Patient> Doctor2;
  40. priority_queue<Patient> Doctor3;
  41. k = 1;
  42. while(N--){
  43. scanf("%s",Type);
  44. //诊治
  45. if(strcmp(Type,"IN") == 0){
  46. //输入病人和医生
  47. patient[k].key = k;
  48. scanf("%d %d",&DoctorID,&patient[k].priority);
  49. //排队
  50. if(DoctorID == 1){
  51. Doctor1.push(patient[k]);
  52. }
  53. else if(DoctorID == 2){
  54. Doctor2.push(patient[k]);
  55. }
  56. else{
  57. Doctor3.push(patient[k]);
  58. }
  59. k++;
  60. }
  61. //出院
  62. else if(strcmp(Type,"OUT") == 0){
  63. //医生DoctorID进行了一次诊治,诊治完毕后,病人出院
  64. scanf("%d",&DoctorID);
  65. //医生1
  66. if(DoctorID == 1){
  67. if(Doctor1.empty()){
  68. printf("EMPTY\n");
  69. }
  70. else{
  71. printf("%d\n",Doctor1.top().key);
  72. //出院
  73. Doctor1.pop();
  74. }
  75. }
  76. //医生2
  77. else if(DoctorID == 2){
  78. if(Doctor2.empty()){
  79. printf("EMPTY\n");
  80. }
  81. else{
  82. printf("%d\n",Doctor2.top().key);
  83. //出院
  84. Doctor2.pop();
  85. }
  86. }
  87. //医生3
  88. else{
  89. if(Doctor3.empty()){
  90. printf("EMPTY\n");
  91. }
  92. else{
  93. printf("%d\n",Doctor3.top().key);
  94. //出院
  95. Doctor3.pop();
  96. }
  97. }
  98. }
  99. }
  100. }
  101. return 0;
  102. }


别人代码:


  
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <queue>
  4. using namespace std;
  5. struct Node
  6. {
  7. int num,id;
  8. friend bool operator < (Node a,Node b)
  9. {
  10. if(a.num!=b.num)
  11. return a.num<b.num;
  12. else
  13. return a.id>b.id;
  14. }
  15. };
  16. int main()
  17. {
  18. int n,A,B,cnt;
  19. char str[5];
  20. Node t;
  21. while(~scanf("%d",&n))
  22. {
  23. cnt=0;
  24. priority_queue <Node>q[4];
  25. while(n--)
  26. {
  27. scanf("%s",str);
  28. if(str[0]=='I'){
  29. scanf("%d%d",&A,&B);
  30. t.id=++cnt;
  31. t.num=B;
  32. q[A].push(t);
  33. }
  34. else{
  35. scanf("%d",&A);
  36. if(!q[A].empty()){
  37. t=q[A].top();
  38. q[A].pop();
  39. printf("%d\n",t.id);
  40. }
  41. else
  42. printf("EMPTY\n");
  43. }
  44. }
  45. }
  46. return 0;
  47. }


 


 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/9251475

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。