hdu 1873 看病要排队 - 优先队列W

优先队列 - 初步

7
IN 1 1     
IN 1 2   IN A B 其中 A 代表 医生编号, B 代表优先权, 病人按照 1 开始编号,IN 一下,就是进来一个病人
OUT 1
OUT 2

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <algorithm>

using std::priority_queue;

const int N = 4;
struct Node {
    int person_id;
    int weight;
    friend bool operator< (Node a, Node b) {
        if (a.weight != b.weight) return a.weight < b.weight;// 重载小于号, 从大到小排
        return a.person_id > b.person_id; // 重要,贡献两次 WA
    }
};

char ch[N];
int main() {
    int T;
    while (scanf("%d", &T) == 1) {
        priority_queue<Node> Q[N];
        int a, b, cnt = 0;
        while (T--) {
            scanf("%s", ch);
            if (ch[0] == 'I') {
                scanf("%d%d", &a, &b);
                Node tmp;
                tmp.person_id = ++cnt;
                tmp.weight = b;
                Q[a].push(tmp);
            }
            else {
                scanf("%d", &a);
                if (!Q[a].empty()) {
                    std::cout << Q[a].top().person_id << std::endl;
                    Q[a].pop();
                }
                else {
                    printf("EMPTY\n");
                }
            }
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值