首先,题意分析
这道题的题意理解起来不难,也不要多想。每次有一个”IN”出现的时候,将该病人的id和优先级送入对应医生的数据组中。每次有一个”OUT”出现的时候就输出对应医生当前数据中优先级最高的病人的id,如果没有病人就输出”EMPTY”
根据题意,第n次的”IN”对应的病人编号就是n
然后说怎么做··
应该用优先队列(最近怎么总是有限队列 差评(╯‵□′)╯︵┻━┻)
然后就是很简单的调用c++的模板库,进行队列的压入啊弹出啊返回队头值啥的
下面上代码
#include <stdio.h>
#include <queue>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
struct Node{
int no;
int data;
const bool operator<(Node a) const
{
if (data==a.data)
return no>a.no;
else
return data<a.data;
}
};
int main(){
int n;
while (scanf("%d",&n)!=EOF)
{
priority_queue<Node> x,y,z;
char ch[5];
int i;
int a,b;
int no=1;
Node node;
for (i=0;i<n;i++)
{
scanf("%s",ch);
if (strcmp(ch,"IN")==0)
{
scanf("%d %d",&a,&b);
if (a==1)
{
node.data=b;
node.no=no++;
x.push(node);
}
else
if(a==2)
{
node.data=b;
node.no=no++;
y.push(node);
}
else
if(a==3)
{
node.data=b;
node.no=no++;
z.push(node);
}
}
else
if (strcmp(ch,"OUT")==0)
{
int a;
scanf("%d",&a);
if (a==1)
{
if(x.empty())
printf("EMPTY\n");
else
{
printf("%d\n",x.top().no);//加上要输出的确定值 输出x.top()不对··· 因为不确定输出的值
x.pop();
}
}
else
if (a==2)
{
if (y.empty())
printf("EMPTY\n");
else
{
printf("%d\n",y.top().no);
y.pop();
}
}
else
if(a==3)
{
if (z.empty())
printf("EMPTY\n");
else
{
printf("%d\n",z.top().no);
z.pop();
}
}
}
}
}
return 0;}
现在是自我反省时间:
天姐说的对 QAQ 不能就是看教程····这道题又是这样,做题提交的代码跟ac的代码差不多···主要是差在输出的时候了 (´Д`) 只能说我又卖的一手好萌··不对 我觉得我应该接受治疗了 (´Д`) 在输出的时候 如果直接printf(“%d\n”,z.top());这样 code blocks不会报错·· 而且样例也能过·但是交了就会ce··
“输出的时候你得给人家指明你要输出的是哪个值啊 (* ̄(エ) ̄) ” 这样的经验get√
所以这次反省的重点就是优先队列输出的时候一定要指明要输出的变量(估计会犯这么二逼错误的人也就我一个吧 我去死了 QAQ 人生好累)