zoukankan      html  css  js  c++  java
  • hdu1873看病要排队

    看病要排队这个是地球人都知道的常识。 
    不过经过细心的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
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <queue>
     4 using namespace std;
     5 const int SIZE = 1e7;
     6 struct node
     7 {
     8     int id,lv;
     9     friend bool operator <(const struct node x,const struct node y)
    10     {
    11         if(x.lv==y.lv)
    12         return x.id>y.id;//返回ID小的
    13         return x.lv<y.lv;//返回优先级大的
    14     }
    15 }tmp;
    16  int main()
    17  {
    18      char str[5];
    19      int n,a,b;
    20      while(scanf("%d",&n)!=EOF)
    21      {
    22          tmp.id=0;
    23          priority_queue<node>q[4];
    24          for(int i=1;i<=n;i++)
    25          {
    26              scanf("%s",str);
    27              if(str[0]=='I')
    28              {
    29                  tmp.id++;
    30                  scanf("%d%d",&a,&b);
    31                  tmp.lv=b;
    32                  q[a].push(tmp);
    33              }
    34              else
    35              {
    36                  scanf("%d",&a);
    37                  if(q[a].empty())
    38                     cout<<"EMPTY"<<endl;
    39                  else
    40                  {
    41                      cout<<q[a].top().id<<endl;
    42                      q[a].pop();
    43                  }
    44 
    45              }
    46          }
    47      }
    48  }
  • 相关阅读:
    为什么 PCB 生产时推荐出 Gerber 给工厂?
    Fedora Redhat Centos 有什么区别和关系?
    【KiCad】 如何给元件给元件的管脚加上划线?
    MCU ADC 进入 PD 模式后出现错误的值?
    FastAdmin 生产环境升级注意
    EMC EMI 自行评估记录
    如何让你的 KiCad 在缩放时不眩晕?
    KiCad 5.1.0 正式版终于发布
    一次单片机 SFR 页引发的“事故”
    java基础之集合
  • 原文地址:https://www.cnblogs.com/--lr/p/7226924.html
Copyright © 2011-2022 走看看