zoukankan      html  css  js  c++  java
  • 杭电 1873 看病要排队 (优先队列的应用)

    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

    先定义结构体存放病人的ID和生病的优先级,按生病的优先级排序,若优先级相同按先后顺序排序,再定义三个队列分别存放三个医生要看的病人,然后按优先级输出病人的ID。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<queue>
     4 using namespace std;
     5 struct st
     6 {
     7     int num;
     8     int you;
     9     bool friend operator <(st a,st b)
    10     {
    11         if(a.you != b.you) 
    12             return a.you<b.you;
    13         else
    14             return a.num>b.num;
    15     }
    16  } patient[2005];
    17  int main()
    18  {
    19      char type[5];
    20      int n,k,a;
    21      
    22      while(scanf("%d",&n)!=EOF)
    23      {
    24         priority_queue<st>doctor1;
    25          priority_queue<st>doctor2;
    26          priority_queue<st>doctor3;
    27          k=0;
    28          while(n--)
    29          {    
    30              scanf("%s",&type);
    31              if(type[0] == 'I')
    32              {
    33                  k++;
    34                  patient[k].num=k;
    35                  scanf("%d %d",&a,&patient[k].you);
    36                  if(a == 1)
    37                  {
    38                      doctor1.push(patient[k]);
    39                  }
    40                  else if(a == 2)
    41                  {
    42                      doctor2.push(patient[k]);
    43                  }
    44                  else
    45                  {
    46                      doctor3.push(patient[k]);
    47                  }
    48              }
    49              else
    50              {
    51                  scanf("%d",&a);
    52                  if(a == 1)
    53                  {
    54                      if(doctor1.empty())
    55                      {
    56                          printf("EMPTY
    ");
    57                      }
    58                      else
    59                      {
    60                          printf("%d
    ",doctor1.top().num);
    61                          doctor1.pop();
    62                      }
    63                  }
    64                  else if(a == 2)
    65                  {
    66                      if(doctor2.empty())
    67                      {
    68                          printf("EMPTY
    ");
    69                      }
    70                      else
    71                      {
    72                          printf("%d
    ",doctor2.top().num);
    73                          doctor2.pop();
    74                      }
    75                  }
    76                  else
    77                  {
    78                      if(doctor3.empty())
    79                      {
    80                          printf("EMPTY
    ");
    81                      }
    82                      else
    83                      {
    84                          printf("%d
    ",doctor3.top().num);
    85                          doctor3.pop();
    86                      }
    87                  }
    88              }
    89          }
    90      }
    91  }
    ——将来的你会感谢现在努力的自己。
  • 相关阅读:
    网页内容自动换行
    问题:Sql Server登录不进去的问题
    Truncate的用法
    SQL当前日期获取技巧
    .NET导出Excel遇到的80070005错误的解决
    养眼方式
    在页面里显示出PPT的效果
    问题(待解决):运行NCover产生的问题
    用CSS控制输入框输入的字母自动转入都是大写字母
    问题:Default引起的问题
  • 原文地址:https://www.cnblogs.com/yexiaozi/p/5706284.html
Copyright © 2011-2022 走看看