HDU 1873 看病要排队(优先队列的简单应用)

看病要排队

题目信息:这道题主要考察的是“优先队列的应用”。

优先队列: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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值