关闭

hdu1873 看病要排序 (2016xynu暑期集训检测 -----E题)

标签: hdu1873hdu 1873优先队列
1282人阅读 评论(0) 收藏 举报
分类:

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

优先队列模拟

首先按照等级排序 如果等级相等  按照次序排序

#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
struct node
{
	//等级 
	int rank;
	//次序 
	int cnt;
	friend bool operator <(node x,node y)
	{
		if(x.rank<y.rank) return true;
		if(x.rank==y.rank&&x.cnt>y.cnt) return true;
		return false;
	}
};
int main()
{
	int n;
	int cnt;
	while(~scanf("%d",&n))
	{
		cnt=0;
		//doc[3]  表示三个医生 
		priority_queue<node>doc[3];
		for(int i=0;i<n;i++)
		{
			char str[10];
			scanf("%s",str);
			if(strcmp(str,"IN")==0)
			{
				int a,b;
				node temp;
				scanf("%d %d",&b,&a);
				temp.rank=a; 
				temp.cnt=++cnt;
				doc[b-1].push(temp);
			}
			if(strcmp(str,"OUT")==0)
			{
				int b;
				scanf("%d",&b);
				if(doc[b-1].empty())
				printf("EMPTY\n");
				else
				{
					//如果当前医生的病人不为空 输出当前医生队列顶的病人的次序  
					node temp;
					temp=doc[b-1].top();
					doc[b-1].pop();
					printf("%d\n",temp.cnt);
				}
			}
		}
		for(int i=0;i<3;i++)
		{
			while(!doc[i].empty())
			doc[i].pop();
		}
	}
	return 0;
}



2
0
查看评论

hdu1873

主要学习优先队列的使用 #include #include //头文件 #include //down 优先队列 using namespace std; struct node//结构体的声明方式 { int pri; int num;//每个 进队人都给他一个(递增的)编...
  • Jeromiewn
  • Jeromiewn
  • 2016-09-03 18:47
  • 229

HDU1873(优先队列的应用)

题目链接: 看病要排队 题目描述: 看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s)...
  • liujian20150808
  • liujian20150808
  • 2016-03-25 20:09
  • 409

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

看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5769  &...
  • su20145104009
  • su20145104009
  • 2015-07-23 17:45
  • 1948

HDU1873---看病要排队

一道优先队列问题,三个优先队列,每次IN就push,OUT先判断是否为空,然后输出 #include #include #include #include #include #include #include #include #include #include ...
  • hy1405430407
  • hy1405430407
  • 2015-05-24 08:04
  • 379

【优先队列】HDU1873看病要排队

Problem Description 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级...
  • wlxsq
  • wlxsq
  • 2016-03-21 20:53
  • 400

hdu 1873 看病要排队

hdu 1873 看病要排队 这题跟上篇写的那个题
  • u011699990
  • u011699990
  • 2014-08-27 16:39
  • 413

hdu 1873 优先队列水题

看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8429  &...
  • mazicwong
  • mazicwong
  • 2016-09-24 16:24
  • 160

hdu1873(看病要排队)

看病要排队                         ...
  • wangwenhao00
  • wangwenhao00
  • 2013-04-29 10:08
  • 1172

hdu1873(看病要排队)

#include #include typedef struct iller {     int DN;     int yox;     int namber; }iller; ...
  • u010372095
  • u010372095
  • 2013-04-22 19:11
  • 735

hdu1873~看病要排队~

看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5996  &...
  • lin14543
  • lin14543
  • 2015-07-28 20:57
  • 509
    个人资料
    • 访问:1429136次
    • 积分:21086
    • 等级:
    • 排名:第443名
    • 原创:602篇
    • 转载:18篇
    • 译文:0篇
    • 评论:376条
    你只管努力 其它交给时光

    点图片联系我


    唐唐女神

    点图片联系我

    访问统计
    Flag Counter
    博客专栏
    最新评论