Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877471
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-08-07 20:48:11

看病要排队Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2909    Accepted Submission(s): 1165


Problem Description
看病要排队这个是地球人都知道的常识。
不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。

现在就请你帮助医院模拟这个看病过程。
 

Input
输入数据包含多组测试,请处理到文件结束。
每组数据第一行有一个正整数N(0接下来有N行分别表示发生的事件。
一共有两种事件:
1:"IN A B",表示有一个拥有优先级B的病人要求医生A诊治。(02:"OUT A",表示医生A进行了一次诊治,诊治完毕后,病人出院。(0
 

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


点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. #include<algorithm>
  5. using namespace std;
  6. struct patient
  7. {
  8.     int num;/*编号*/
  9.     int imp;/*重要度*/
  10. }w[1001];
  11. struct comp
  12. {
  13.     bool operator()(patient &x,patient &y)/*结构体排序*/
  14.     {
  15.         if(x.imp<y.imp) return true;
  16.         if(x.imp==y.imp&&x.num>y.num) return true;
  17.         return false;
  18.     }
  19. };
  20. int main()
  21. {
  22.     int n,a,b,count;
  23.     char str[101];
  24.     while(~scanf("%d",&n))
  25.     {
  26.         //申请三个优先队列就够了,每个事件发生时,找到对应的医生队列
  27.         //如果为空直接输出empty;
  28.         priority_queue<patient,vector<patient>,comp>doc[4];/*优先队列*/
  29.         count=1;
  30.         while(n--)
  31.         {
  32.             scanf("%s",str);
  33.             if(str[0]=='I')
  34.             {
  35.                 scanf("%d %d",&a,&b);
  36.                 w[count].num=count;
  37.                 w[count].imp=b;
  38.                 doc[a].push(w[count]);/*直接插入一个结构体....*/
  39.                 count++;
  40.             }
  41.             else
  42.             {
  43.                 scanf("%d",&a);
  44.                 if(doc[a].empty())
  45.                 {
  46.                     printf("EMPTY\n");
  47.                 }
  48.                 else
  49.                 {
  50.                     printf("%d\n",doc[a].top().num);
  51.                     doc[a].pop();
  52.                 }
  53.             }
  54.         }
  55.     }
  56.     return 0;
  57. }

阅读(1054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~