杭电1873题 看病要排队
【摘要】 题目链接~~>
这题是接触优先队列的第二题代码有点。。。
开始做时一直wa,最后才明白应该把 priority_queue<zha>q1;
等放到循环里面去,。。。
代码:
#include<stdio.h>#include<string.h>#include<queue>using namespace...
这题是接触优先队列的第二题代码有点。。。
开始做时一直wa,最后才明白应该把 priority_queue<zha>q1;
等放到循环里面去,。。。
代码:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct zha
{
int a1;
int h1;
friend bool operator<(const zha &a,const zha &b)
{
if(a.a1!=b.a1)
return a.a1 < b.a1 ;
else return a.h1 > b.h1;
}
};
struct zhan
{
int a2;
int h2;
friend bool operator<(const zhan &a,const zhan &b)
{
if(a.a2!=b.a2)
return a.a2 < b.a2 ;
else return a.h2 > b.h2;
}
};
struct zhang
{
int a3;
int h3;
friend bool operator<(const zhang &a,const zhang &b)
{
if(a.a3!=b.a3)
return a.a3 < b.a3 ;
else return a.h3 > b.h3;
}
};
int main()
{
char s[10];
int T,n1,n2;int k;
while(scanf("%d",&T)!=EOF)
{
priority_queue<zha>q1;
priority_queue<zhan>q2;
priority_queue<zhang>q3;
zha current1;
zhan current2;
zhang current3;
k=1;
while(T--)
{
scanf("%s",s);
if(s[0]=='I')
{
scanf("%d%d",&n1,&n2);
if(n1==1)
{
current1.a1=n2;
current1.h1=k;
q1.push(current1);
}
else if(n1==2)
{
current2.a2=n2;
current2.h2=k;
q2.push(current2);
}
else if(n1==3)
{
current3.a3=n2;
current3.h3=k;
q3.push(current3);
}
k++;
}
else {
scanf("%d",&n1);
if(n1==1)
{
if(q1.empty())
{
printf("EMPTY\n");
}
else {
current1=q1.top();
printf("%d\n",current1.h1);
q1.pop();
}
}
else if(n1==2)
{
if(q2.empty())
{
printf("EMPTY\n");
}
else {
current2=q2.top();
printf("%d\n",current2.h2);
q2.pop();
}
}
else if(n1==3)
{
if(q3.empty())
{
printf("EMPTY\n");
}
else {
current3=q3.top();
printf("%d\n",current3.h3);
q3.pop();
}
}
}
}
}
return 0;
}
别人代码:
/*********************************
* 日期:2013-3-16
* 作者:SJF0115
* 题号: HDU 题目1873: 看病要排队
* 来源:http://acm.hdu.edu.cn/showproblem.php?pid=1873
* 结果:AC
* 来源:2008浙大研究生复试热身赛(2)——全真模拟
* 总结:
**********************************/
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
struct Patient
{
//值
int priority;
//编号
int 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 i,N,k;
char Type[4];
int DoctorID,PatientID;
Patient patient[2001];
while(scanf("%d",&N) != EOF){
//定义三个医生
priority_queue<Patient> Doctor1;
priority_queue<Patient> Doctor2;
priority_queue<Patient> Doctor3;
k = 1;
while(N--){
scanf("%s",Type);
//诊治
if(strcmp(Type,"IN") == 0){
//输入病人和医生
patient[k].key = k;
scanf("%d %d",&DoctorID,&patient[k].priority);
//排队
if(DoctorID == 1){
Doctor1.push(patient[k]);
}
else if(DoctorID == 2){
Doctor2.push(patient[k]);
}
else{
Doctor3.push(patient[k]);
}
k++;
}
//出院
else if(strcmp(Type,"OUT") == 0){
//医生DoctorID进行了一次诊治,诊治完毕后,病人出院
scanf("%d",&DoctorID);
//医生1
if(DoctorID == 1){
if(Doctor1.empty()){
printf("EMPTY\n");
}
else{
printf("%d\n",Doctor1.top().key);
//出院
Doctor1.pop();
}
}
//医生2
else if(DoctorID == 2){
if(Doctor2.empty()){
printf("EMPTY\n");
}
else{
printf("%d\n",Doctor2.top().key);
//出院
Doctor2.pop();
}
}
//医生3
else{
if(Doctor3.empty()){
printf("EMPTY\n");
}
else{
printf("%d\n",Doctor3.top().key);
//出院
Doctor3.pop();
}
}
}
}
}
return 0;
}
别人代码:
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
struct Node
{
int num,id;
friend bool operator < (Node a,Node b)
{
if(a.num!=b.num)
return a.num<b.num;
else
return a.id>b.id;
}
};
int main()
{
int n,A,B,cnt;
char str[5];
Node t;
while(~scanf("%d",&n))
{
cnt=0;
priority_queue <Node>q[4];
while(n--)
{
scanf("%s",str);
if(str[0]=='I'){
scanf("%d%d",&A,&B);
t.id=++cnt;
t.num=B;
q[A].push(t);
}
else{
scanf("%d",&A);
if(!q[A].empty()){
t=q[A].top();
q[A].pop();
printf("%d\n",t.id);
}
else
printf("EMPTY\n");
}
}
}
return 0;
}
文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nyist_zxp/article/details/9251475
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)