zoukankan      html  css  js  c++  java
  • hdu 1873 看病要排队

    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=1873

    看病要排队

    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<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<vector>
     7 #include<queue>
     8 #include<map>
     9 #include<set>
    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<Node> que[3];
    41 int main() {
    42 #ifdef LOCAL
    43     freopen("in.txt", "r", stdin);
    44     freopen("out.txt", "w+", stdout);
    45 #endif
    46     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
    ", 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
    By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明
  • 相关阅读:
    在你设计中可能用到的20个杂志 PSD 原型
    Gradify
    CamanJS – 提供各种图片处理的 JavaScript 库
    免费素材:包含 250+ 组件的 DO UI Kit
    24个很赞的 Node.js 免费教程和在线指南
    Dynamics.js
    Page Scroll Effects
    Slides
    15款加速 Web 开发的 JavaScript 框架
    Wee – 为现代 Web 开发打造的 CSS 脚手架
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4604345.html
Copyright © 2011-2022 走看看