博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1873 看病要排队
阅读量:5091 次
发布时间:2019-06-13

本文共 2421 字,大约阅读时间需要 8 分钟。

题目连接

看病要排队

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

优先队列的运用。。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using std::cin;11 using std::cout;12 using std::endl;13 using std::find;14 using std::sort;15 using std::set;16 using std::map;17 using std::pair;18 using std::vector;19 using std::multiset;20 using std::multimap;21 using std::priority_queue;22 #define pb(e) push_back(e)23 #define sz(c) (int)(c).size()24 #define mp(a, b) make_pair(a, b)25 #define all(c) (c).begin(), (c).end()26 #define iter(c) decltype((c).begin())27 #define cls(arr,val) memset(arr,val,sizeof(arr))28 #define cpresent(c, e) (find(all(c), (e)) != (c).end())29 #define rep(i, n) for (int i = 0; i < (int)(n); i++)30 #define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)31 const int Max_N = 100010;32 typedef unsigned long long ull;33 struct Node {34 int id, f;35 Node(int i = 0, int j = 0) :id(i), f(j) {}36 friend bool operator<(const Node &a, const Node &b) {37 return a.f == b.f ? a.id > b.id : a.f < b.f;38 }39 };40 priority_queue
que[3];41 int main() {42 #ifdef LOCAL43 freopen("in.txt", "r", stdin);44 freopen("out.txt", "w+", stdout);45 #endif46 char buf[10];47 int n, a, b, k;48 while (~scanf("%d", &n)) {49 k = 1;50 rep(i, n) {51 scanf("%s", buf);52 if (buf[0] == 'I') {53 scanf("%d %d", &a, &b);54 que[a - 1].push(Node(k++, b));55 } else {56 scanf("%d", &a);57 if (que[a - 1].empty()) { puts("EMPTY"); continue; }58 printf("%d\n", que[a - 1].top().id); que[a - 1].pop();59 }60 }61 rep(i, 3) {62 while (!que[i].empty()) que[i].pop();63 }64 }65 return 0;66 }
View Code

转载于:https://www.cnblogs.com/GadyPu/p/4604345.html

你可能感兴趣的文章
【2.3】初始Django Shell
查看>>
Linux(Centos)之安装Redis及注意事项
查看>>
bzoj 1010: [HNOI2008]玩具装箱toy
查看>>
Kotlin动态图
查看>>
基元线程同步构造
查看>>
ElasticSearch 获取es信息以及索引操作
查看>>
Apollo快速安装视频教程
查看>>
mysql 用户管理和权限设置(转)
查看>>
PHP进程通信基础——信号
查看>>
32复用
查看>>
openstack pike 使用 linuxbridge + vxlan
查看>>
vim 括号匹配 以及各种跳转技巧
查看>>
正在学习或准备学习 Web 应用开发的初学者
查看>>
各大公司架构实践聚合
查看>>
西安前端交流会 - 【前端求职、就业、面试技巧】- 第5期-2015.3.29 报名了
查看>>
Linux-进程间通信(四): 域套接字
查看>>
jq check 复选变单选。
查看>>
一个数组中同时找到最大/最小值
查看>>
python终端下打印颜色
查看>>
《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Leader选举】
查看>>