看病要排队

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6272    Accepted Submission(s): 2596

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

代码:(代码里面有详解,具体思路,题目已经给的够清楚了)

import java.util.ArrayList;
import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {ArrayList<patient> list = new ArrayList<patient>(); //利用ArrayList来实现病人先来先服务,不过题目要求优先级高的先看病,后面取病人编号时有条件控制的int n = sc.nextInt();  //接收发生事件的数目sc.nextLine();  //这里要注意,因为sc.nextInt()不会接收后面的回车符,所以这里一定要接收回车符,不然会影响后面的数据接收int num=1;  //用来表示病人编号while (n-- > 0) {String str = sc.nextLine();  //接收发生事件String[] strs = str.split(" "); //因为中间有空格隔开,所以直接用空格分隔字符串为字符串数组//如果是需要看医生的就和”IN“匹配,如果匹配成功则把病人信息加入到list的最后面,如果不是,那个就是和”OUT“匹配了,就进行else后面的操作if (strs[0].compareTo("IN") == 0) { //根据题意:分割后的strs[]数组,第一个(strs[0])是IN,第二个(strs[1])是病人要求的医生的编号,第一个(strs[1])是病人优先级patient p = new patient(num++,strs[1], strs[2]);list.add(p);} else {//如果链表为空,表示没有病人,就不可可能OUT,所以直接输出"EMPTY";否则进行else里面的操作(这里看似多此一举,但是能快速处理空链表时的情况)if (list.isEmpty()) {System.out.println("EMPTY");} else {//根据题意:分割后的strs[]数组,第一个(strs[0])是OUT,第二个(strs[1])是该医生进行一次诊治int out = -1; //用来保存优先级,初始化优先级最低int outIndex=0;//用来保存要输出的那个病人在list里面的位置boolean flag = false; //用来控制如果没有该医生需要处理的病,就不动,有的话变为true,方便后面输出//遍历list链表for (int i = 0; i < list.size(); i++) {//条件:先匹配到该医生需要处理的病人是否有;该医生需要处理的病人的优先级比其他病人的优先级都要高if (list.get(i).getDoctor().compareTo(strs[1]) == 0&& Integer.parseInt(list.get(i).getPriority()) > out) {out = Integer.parseInt(list.get(i).getPriority()); //把满足要求的病人的优先级赋值给outoutIndex=i; //把满足要求的病人在list里面的位置赋值给outIndexflag = true;}}//如果有该医生需要处理的病人则输出病人编号;否则输出"EMPTY"if (flag) {System.out.println(list.remove(outIndex).getNum());flag = false;} else {System.out.println("EMPTY");}}}}}}
}
//patient类,这是我用来封装病人的编号,需要的医生的编号,和优先级的类
class patient {private int num;  //编号private String doctor = null;//医生的编号这里就是(1,2,3)private String Priority = null; //优先级(根据题目给的)//构造函数public patient(int num, String doctor, String priority) {this.num = num;this.doctor = doctor;Priority = priority;}public int getNum() { //获取病人编号return num;}public String getDoctor() { //获取医生编号return doctor;}public String getPriority() { //获取优先级return Priority;}
}

结果截图:

hdu1873 看病要排队哦相关推荐

  1. HDU1873 看病要排队【模拟+优先队列】

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. hdu1873 看病要排队-优先队列

    Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的 ...

  3. 看病要排队 (hdu1873,优先队列)

    看病要排队这个是地球人都知道的常识.  不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人病情有轻重,所以不能根据简单的先来先 ...

  4. hdu 1872(看病要排队)(优先队列)

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. HDU 1873 看病要排队(结构体+优先队列)

    题目: Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病. ...

  6. 【HDU - 1873】 看病要排队(优先队列)

    题干: 看病要排队这个是地球人都知道的常识.  不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人病情有轻重,所以不能根据简单 ...

  7. Java算法_优先队列和PriorityQueue——HDU 1873:看病要排队

    目录 优先队列和PriorityQueue HDU 1873:看病要排队 java.util.Comparator 优先队列和PriorityQueue java.util.PriorityQueue ...

  8. hdu 1873 看病要排队

    看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. HUD1873看病要排队

    HUD1873看病要排队 Problem Description 看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗, ...

最新文章

  1. 【机器学习入门】(7) 线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降
  2. 学计算机excel就很好吗,零基础学习excel小技巧
  3. win8计算机就一个盘,win8硬盘分区,详细教您win8硬盘怎么分区
  4. 游戏引擎开发和物理引擎_视频游戏开发的最佳游戏引擎
  5. P3-weixin-2.0.1 版本发布,JAVA微信插件框架
  6. 关于embedding的理解,2020-7-30
  7. Android开发之SharedPreferences
  8. MATLAB实现FFT算法
  9. optisystem自建matlab信号源仿真
  10. windows查看局域网内所有已使用的IP
  11. 英语语法自动矫正(nounplus)
  12. 网上订餐叫外卖的发展优势
  13. Unity 接入百度AI - 通用物体和场景识别
  14. UE4 UDP是如何进行可靠传输的
  15. Word控件Spire.Doc更新至最新版v10.7,增强产品稳定性,修复老版本漏洞
  16. 源码分析教程5部曲之1——漫游C语言-杨振平-专题视频课程
  17. cisco 请用ssh+3A认证取代telnet远程登录
  18. 怎么赚钱快?只要不是这三种人,都可以赚到钱!
  19. 【题集·待解决】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
  20. JavaScript, 各国电话号码的格式化

热门文章

  1. [2020.8.3]联想 A5(L18011) Magisk ROOT 纯净无推广 一键刷机 ZUI_3.9.068
  2. 【空间转录组】MIA分析
  3. 在线流程图绘制工具测评-ioDraw
  4. java热词_生成热词
  5. iOS 14.5正式版如约而至 支持通过Apple Watch解锁iPhone
  6. mac地址是由多少个bit组成_MAC地址是什么,MAC地址是怎么构成的,MAC地址占多少位,作用如何? 简单答案!!...
  7. python中有没有switch_为什么python没有switch/case
  8. 如何评估开发代码质量
  9. php for循环写三角形,【杂谈】PHP运用for轮回输出三角形
  10. 微信小程序如何进行反编译详细教程