HDU 1873 看病要排队(优先队列的简单应用)
2014-11-04 16:45
459 查看
看病要排队
题目信息:这道题主要考察的是“优先队列的应用”。优先队列:STL 的优先队列也定义在头文件<queue>中,用“ priority_queue<int>pq ”来声明。这个pq是一个“越小的整数,优先级越低的优先队列 ”。由于出队元素并不是最先进队的元素,出队的方法由queue的front()变成了top().
也可以自定义优先级,例如:定义priority_queue<int,vector<int>,cmp>pq. 下面是这个cmp的定义:
struct cmp{ bool operator() (comst int a,const int b) const{ //a的优先级比b小时返回 return a%10 > b%10; } }对于一些常见的优先队列,STL 提供了更为简单的定义方法,例如:“越小的整数优先级越大的优先队列”可以写成“ priority_queue<int,vector<int>,greater<int> >pq ”.注意,最后两个" > "符号不要连在一起写,否则会被很多(但不是所有)编译器误认为是" >> "运算符。
这道题就是优先队列的应用,自定义一个结构体,
struct node { int id,num; friend bool operator < (node a,node b) { if(a.num!=b.num) return a.num<b.num; else return a.id>b.id; } };
实现优先队列,下面是代码,大家可以参考一下。
题目来源:点击打开链接
源代码:
#include <stdio.h>
#include <queue>
using namespace std;
struct node { int id,num; friend bool operator < (node a,node b) { if(a.num!=b.num) return a.num<b.num; else return a.id>b.id; } };
int main()
{
int n,a,b,count;
char str[5];
node t;
while(scanf("%d",&n)!=EOF)
{
count=0;
priority_queue <node>q[4];
while(n--)
{
scanf("%s",str);
if(str[0]=='I')
{
scanf("%d %d",&a,&b);
t.id=++count;
t.num=b;
q[a].push(t);
}
else
{
scanf("%d",&a);
if(!q[a].empty())
{
t=q[a].top();
q[a].pop();
printf("%d\n",t.id);
}
else
printf("EMPTY\n");
}
}
}
return 0;
}
相关文章推荐
- HDU 1873 看病要排队 优先队列
- HDU-1873-看病要排队【优先队列】
- hdu 1873 看病要排队 - 优先队列W
- hdu杭电1873 看病要排队【优先队列】
- HDU 1873 看病要排队 优先队列
- HDU - 1873 看病要排队(学会用set,也可用优先队列写)
- HDU 1873 看病要排队 【优先队列】
- hdu 1873 看病要排队(优先队列模拟)
- 【杭电oj】1873 - 看病要排队(优先队列,水)
- (hdu step 8.1.5)看病要排队(优先队列的基本使用——在看病排队时,优先级高的排在前面.求在这种情况下的出队序列)
- 看病要排队 (优先队列的应用)
- HDU-1873 看病要排队(队列模拟)
- hdoj 1873 看病要排队(优先队列的运用)
- 杭电-1873 看病要排队(结构体优先队列)
- hd 1873 看病要排队(队列优先)
- 【优先队列】HDU 1873——看病找医生
- HDUOj 看病要排队 优先队列的使用 题目1873
- HDU Problem 1873 看病要排队 【优先队列】
- hdu 1873 看病要排队(优先级队列)
- 【优先队列】HDU 1873——看病找医生