HDU 1873 看病要排队 —— priority_queue 的使用

Posted bjxqmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1873 看病要排队 —— priority_queue 的使用相关的知识,希望对你有一定的参考价值。

题目描述

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

代码示例

#include<queue>
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
struct person {
    int id, num;//编号,优先级
};
//先定义结构体,再写重载函数定义优先级比较简单明了 
bool operator < (const person &a, const person &b) {//重载 "<" 操作符定义优先级
    if (a.num == b.num)//当级别相同时从小到大排序 
        return a.id > b.id;
    else
        return a.num < b.num;//当级别不同是从大到小排序 
}
int main() {
    int n;
    while (cin >> n) {
        priority_queue<person>doctors[4];
        int id = 1, docIndex, num;
        string str;
        person temPer;
        while (n--) {
            cin >> str >> docIndex;
            if (str == "IN") {
                cin >> temPer.num;
                temPer.id = id++;//储存病人的编号
                doctors[docIndex].push(temPer);//把病人入相应医生队列
            }
            else {
                if (!doctors[docIndex].empty()) {//有病人在诊断 
                    temPer = doctors[docIndex].top();
                    doctors[docIndex].pop();
                    cout << temPer.id << endl;
                }
                else
                    cout << "EMPTY" << endl;
            }
        }
    }
}

知识点

STL 中,优先队列是用二叉堆来实现的,往队列中 push 或 pop 一个数,复杂度是 O(log n)。例如图论中的 Dijkstra 算法的程序实现,用 STL 中的优先队列能极大地简化代码。

例子

说明

priority_queue<Type> pq; 

定义优先队列,Type为数据类型,如int,float,char 或结构体等

q. push(item);

插入新元素

q.top(); 

返回具有最高优先级的元素值,但不删除该元素

q.pop();

删除最高优先级元素

以上是关于HDU 1873 看病要排队 —— priority_queue 的使用的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1873 看病要排队(优先级队列)

hdu1873看病要排队

hdu1873(看病要排队)循环队列害死我了

HDU - 1873 看病要排队(优先队列)

HDU 1873 看病要排队

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