看病要排队——HDU1873

简介: 看病要排队——HDU1873
第一次写这个题的时候感觉很麻烦,最后回头根据别人题解再来看就是模拟加队列的优先级问题,然后早上写的时候
因为if 和else if wa了好多次,最后好不容易写出来了就分享一下。

题目:


看病要排队这个是地球人都知道的常识。

不过经过细心的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

题意描述:这个题是模拟以及队列优先级问题,一共三个医生十级优先级,级数越高看病越快,就说明越先出队,如果同样的优先级,就按队列先进先出。

**解题思路**:先定义三个串分别存入三个医生的病人,每来一个病人,就把他们的级数存入数组中,遇到out,就把出队列存入到另一个数组中,最后输入完了再输出病人的看病情况。

程序代码:

#include<stdio.h>
#include<string.h>
int main()
{
  char s[200];
  int a1[2010],a2[2010],a3[2010],b[2000];
  int cas,n,m,i,j,count,t;
  while(~scanf("%d",&cas))
  {
    int k=1;
    count=0;
    memset(a1,0,sizeof(a1));
    memset(a2,0,sizeof(a2));
    memset(a3,0,sizeof(a3));
    for(i=0;i<cas;i++)
    { 
      scanf("%s",s);
      if(s[0]=='I')
      {
        scanf("%d%d",&n,&m);
        if(n==1)
          a1[k++]=m;
        else if(n==2)
          a2[k++]=m;
        else 
          a3[k++]=m;
      }
      if(s[0]=='O')
      {
        scanf("%d",&t);
        int max=-1,c=0;
        if(t==1)
        {
          for(j=1;j<k;j++)
          {
            if(a1[j]!=0&&a1[j]>max)
            {
              max=a1[j];
              c=j;
            }
          }
          a1[c]=0;
          b[count++]=c;
        }
        else if(t==2)
        {
          for(j=1;j<k;j++)
          {
            if(a2[j]!=0&&a2[j]>max)
            {
              max=a2[j];
              c=j;
            }
          }
          a2[c]=0;
          b[count++]=c;
        }
        else if(t==3)
        {
          for(j=1;j<k;j++)
          {
            if(a3[j]!=0&&a3[j]>max)
            {
              max=a3[j];
              c=j;
            }
          }
          a3[c]=0;
          b[count++]=c;
        }
      }   
    }
    for(i=0;i<count;i++)
      {
        if(b[i]!=0)
          printf("%d\n",b[i]);
        else
          printf("EMPTY\n");
      } 
  }
  return 0;
} 
相关文章
|
测试技术 uml
UML之用例图
UML之用例图
415 1
|
JavaScript 前端开发
js数字(Number)方法汇总
js数字(Number)方法汇总
106 0
|
人工智能 自然语言处理 语音技术
操作系统的演变与未来
【8月更文挑战第29天】本文将深入探讨操作系统的发展历程,从最早的单任务操作系统到现代的多用户、多任务操作系统。我们将分析操作系统的基本功能和组成,以及它们如何影响计算机的性能和用户体验。此外,我们还将展望未来操作系统可能的发展方向,包括人工智能和云计算等新兴技术的融合。让我们一起踏上这段穿越时空的技术旅程,探索操作系统的秘密和魅力。
|
存储 大数据 分布式数据库
使用Apache HBase进行大数据存储:技术解析与实践
【6月更文挑战第7天】Apache HBase,一个基于HDFS的列式存储NoSQL数据库,提供高可靠、高性能的大数据存储。其特点是列式存储、可扩展至PB级数据、低延迟读写及多版本控制。适用场景包括大规模数据存储、实时分析、日志存储和推荐系统。实践包括集群环境搭建、数据模型设计、导入、查询及性能优化。HBase在大数据存储领域扮演关键角色,未来有望在更多领域发挥作用。
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
161 1
|
数据可视化 Java uml
Java的UML类图
Java的UML类图
369 1
|
机器学习/深度学习 监控 算法
利用深度学习优化图像识别准确性的探索
【5月更文挑战第6天】 在数字图像处理领域,随着数据量的激增和算法复杂度的提升,传统图像识别技术面临巨大挑战。本文通过构建一个基于深度卷积神经网络(CNN)的模型,探讨了如何提高图像识别的准确性。我们详细分析了网络结构、激活函数和优化器的选择对模型性能的影响,并通过实验验证了所提出方法的有效性。结果表明,采用适当的数据增强技术和调整网络参数,可以显著提升模型在复杂数据集上的识别精度。
182 2
|
新零售 大数据 UED
多商家入驻分销模式商城开发系统案例|成熟技术
随着新零售模式的逐步落地,线上和线下将从以前的相对独立、冲突逐渐转化为相互融合
|
机器学习/深度学习 算法 API
MFCC语音特征值提取算法(二)
MFCC语音特征值提取算法(二)
559 0
|
JavaScript 小程序
微信小程序伪装页面(定时改变页面内容)
微信小程序伪装页面(定时改变页面内容)
468 0

热门文章

最新文章