HUD1873看病要排队

简介: HUD1873看病要排队

HUD1873看病要排队

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

分析:优先队列的使用以及运算符重载的使用. 由于每次医生看病根据两个准则,先进行优先级比较,如果优先级相同则按序号就医.所以我们队列里面的是一个结构体类型,我们需要进行运算符重载.之后思路就很简单了,模拟这个过程即可.

参考代码:

#include<iostream>
#include<queue>
#include<string>
using namespace std;
struct Node{
  int id,vip;
//    friend bool operator<(Node X,Node Y){
//    if(X.vip==Y.vip){
//      return X.id > Y.id;//vip一样,id越大,Node越小
//     }else{
//      return X.vip < Y.vip;// vip不同,vip越小,Node越小.
//     }
//   }
  bool operator<(const Node &Y) const{
    if(vip==Y.vip) {
      return  id>Y.id;
    } else {
      return vip<Y.vip;
    }
  }
};
int n,a,b; //b:优先级 
string str;
int main(){
   cin>>n;
   while(~(scanf("%d",&n))){
    Node node;
    node.id = 0;
    priority_queue<Node> q[5];
    while(n--){
      cin>>str;
      if(str=="IN"){
        cin>>a>>b;
        node.id++;
        node.vip = b;
        q[a].push(node);//进栈. 
       }else{
        cin>>a;
        if(q[a].empty()){
          cout<<"EMPTY"<<endl;
         }else{
          cout<<q[a].top().id<<endl;
          q[a].pop();
          //cout<<endl;
         }
       } 
     }
   }
  return 0;
}
相关文章
|
8月前
看病要排队——HDU1873
看病要排队——HDU1873
|
8月前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
8月前
|
C++ 容器
[C++/PTA] 办事大厅排队
[C++/PTA] 办事大厅排队
83 0
飞机大战-我方飞机移动基于事件
飞机大战-我方飞机移动基于事件。
74 0
|
存储 前端开发 API
C# 从做早餐看同步异步
C# 从做早餐看同步异步
61 0
小白鼠排队
小白鼠排队
161 0
|
Web App开发 前端开发 JavaScript
冬奥快结束了还没有抢到冰墩墩?程序员一招让你不用排队不用愁!
随着“2022北京冬奥会”的盛大开幕,冰墩墩的热度与日俱增,线上被抢空,线下排长龙,为购买冰墩墩苦恼的竟少了几根秀发!如今冬奥马上就要拉下帷幕,还没抢到“冰墩墩”不要紧,这款程序来帮忙,国内一位程序员dragonir用前端+建模的方式自己就实现了线上拥有“冰墩墩”,同时将代码开源到了GitHub上,不得不感叹科技的力量,程序员的伟大,让拥有“冰墩墩”变得如此简单!
冬奥快结束了还没有抢到冰墩墩?程序员一招让你不用排队不用愁!
|
安全
游戏测试中的那些坑-先买票再上车
首先来看一个简化版本的购买物品时序图,步骤不多但应该包含了核心内容。其中出问题在于步骤6、7上。服务器是先将玩家需要获得的物品加入到背包中,然后才去扣除对应的货币。这个时候就可能产生了一个“吃霸王餐”的漏洞,假如扣除货币失败了,由于先给玩家添加了物品,因此就变成了免费获得了所购买物品。而当一个玩家产生了这样的漏洞就会一传十,十传百,很快就会让整个游戏的经济循环出现问题,如果游戏厂商发现的晚的话,补救措施就更难了。
228 0
游戏测试中的那些坑-先买票再上车
|
数据采集 JSON 自然语言处理
公交闹钟 —— 再也不用白等车了
公交闹钟 —— 再也不用白等车了
206 0
公交闹钟 —— 再也不用白等车了
|
机器学习/深度学习 人工智能 算法
看病排队难,阅片机器人什么时候才能让我们加快脚步?
还记得你上次为了看一个X片的结果在医院排队排了多久吗?
看病排队难,阅片机器人什么时候才能让我们加快脚步?