看病要排队

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 5769    Accepted Submission(s): 2369

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
 
Author
linle
 
Source
 
Recommend
 

pid=1873" style="color:rgb(26,92,200); text-decoration:none">Statistic | Submit | Discuss | Note

用队列模拟看病过程就好啦 。

。为什么我的眼里有了泪水。。

由于我链表不会。。。

#include <stdio.h>
#include <queue>
using namespace std;
struct node
{
int x,num;
friend bool operator<(node a,node b)//先对病人的优先级排序,假设相等再对编号排序
{
if(a.x<b.x) return true;
if(a.x==b.x&&a.num>b.num) return true;
return false;
}
};
priority_queue<node>s1;//
priority_queue<node>s2;//
priority_queue<node>s3;//哈哈 用了三个。 。。
int main()
{
int n,mark[2005];
char str[10];
while(scanf("%d",&n)!=EOF)
{
while(!s1.empty())
s1.pop();
while(!s2.empty())
s2.pop();
while(!s3.empty())
s3.pop();
int q=0,a,b,t=1;
for(int i=0;i<n;i++)
{
scanf("%s",str);
if(str[0]=='I')//假设IN
{
node temp;
scanf("%d %d",&a,&b);
temp.num=t++,temp.x=b;
if(a==1)
s1.push(temp);
else if(a==2)
s2.push(temp);
else
s3.push(temp);
}
else//假设OUT,用一个mark数组记录一下序号病人,当然,假设队列为空。记录为0
{
node temp;
scanf("%d",&a);
if(a==1)
{
if(!s1.empty())
{
temp=s1.top(),s1.pop();
mark[q++]=temp.num;
}
else
mark[q++]=0;
}
else if(a==2)
{
if(!s2.empty())
{
temp=s2.top(),s2.pop();
mark[q++]=temp.num;
}
else
mark[q++]=0;
}
else
{
if(!s3.empty())
{
temp=s3.top(),s3.pop();
mark[q++]=temp.num;
}
else
mark[q++]=0;
}
}
}
for(int i=0;i<q;i++)//推断mark【i】数值输出
{
if(mark[i]==0)
printf("EMPTY\n");
else
printf("%d\n",mark[i]);
}
}
return 0;
}

hdu1873 看病要排队(结构体优先队列)的更多相关文章

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

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

  2. hdu1873 看病要排队【优先队列】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Time Limit: 3000/1000 MS (Java/Others)     ...

  3. hdu1873 看病要排队 优先队列

    看病要排队 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

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

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

  5. HDU-1873 看病要排队(队列模拟)

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

  6. HDU1873 看病要排队 —— 优先队列(STL)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题解: 题目已经说出了解题方法:优先队列.但是之前没有学过优先队列,而且这题还是在现场赛做的.由 ...

  7. hdu1873-看病要排队-(结构体优先队列)

    http://acm.hdu.edu.cn/showproblem.php?pid=1873 #include<stdio.h> #include<iostream> #inc ...

  8. hdoj 1873 看病要排队【优先队列】

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

  9. hdu1837 看病要排队(优先队列)

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

随机推荐

  1. idea java 注释模板配置

    在网上找了好久,好多的文章都有一个共同的病点就是“@param注释当有多个参数时候,全部放在了一行里面”,非常不友好. 以下是我整理好的,完全按照eclipse的注释风格. !!!先看最后实现的效果图 ...

  2. JAVA基础——网络编程之网络链接

    一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章最开始提到的定位的问题. IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证):网络编程是和远程计算 ...

  3. tab bar controller

    下面记一下怎样通过代码的方式为选项卡添加视图. 1.创建一个基于Empty Application的项目 2.创建两个新类,基类选择UIViewController,勾选With XIB for us ...

  4. js 调用flash在chrome报错

    1.网页内嵌动态生成的flash出错,出错信息如下: #25081850 myChartId::RendererManager Error >> There was an error re ...

  5. 2012 noip提高 Vigenère 密码

    P1079 Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de VigenèreBlaisedeVigene`re 设计了一种多表密码加密算法―― VigenèreVigene ...

  6. 文本三剑客之grep

    接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...

  7. p3386 二分图匹配模板

    https://www.luogu.org/problemnew/show/P3386 可以只做一边的匹配 #include <bits/stdc++.h> using namespace ...

  8. keepalived安装脚本

    keepalived_install.sh: #cat keepalived_install.sh #!/bin/bash pkg=keepalived-2.0.10.tar.gz tar xf $p ...

  9. luogu1502 窗口的星星

    扫描线应该打懒标记的-- #include <algorithm> #include <iostream> #include <cstdio> using name ...

  10. Fiddler抓包-只抓APP的请求

    from:https://www.cnblogs.com/yoyoketang/p/6582437.html fiddler抓手机app的请求,估计大部分都会,但是如何只抓来自app的请求呢? 把来自 ...