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 的使用的主要内容,如果未能解决你的问题,请参考以下文章