算法竞赛入门经典例题-优先队列(阿格斯)

原创 2015年07月09日 21:09:39

优先队列

例题:
阿格斯(Argus)
你的任务是编写一个称为Argus的系统。该系统是支持一个Register命令,Register Q_num Period
该命令注册了一个触发器,它每秒钟就会产生一次编号为Q_num的事件,你的任务是模拟出钱k个事件。如果多个事件同时发生,先处理Q_NUM小的事件

#include<iostream>
#include<queue>
using namespace std;

struct Item{
   int QNum,Period,Time;
   bool operator <(const Item& a )const {
       return Time>a.Time||(Time=a.Time&&QNum>a.QNum);
   }
}
int main(){
    priority_queue<Item> pq;
    char s[20];

    while(scanf("%s",s)&&s[0]!='#'){
        Item item;
        scanf("%d%d",&item.QNum,&item.Period);
        item.Time=item.Period;
        pq.push(item);
    }

    int k;
    scanf("%d",&k);
    while(k--){
      Item r=pq.top();
      pq.pop();
      printf("%d\n",r.QNum);
      r.Time+=r.Period;
      pq.push(r);
    }
   return 0;
}

我的认识
1. 优先队列的用法。把k个有序表合并成一个有序表,然后用优先队列的方法进行管理是优先队列的精华所在,在写优先队列的时候,要注意优先队列的优先级是怎样确定的。
2. 运算符重载。此题中运算符重载是优先队列优先级确定的关键,要注意的是,运算符重载函数中return的值为true则返回后面一个值,即给后面值以更高的优先级。
3. 此题中,在输出一个Q_NUM的时候一定要重置时间,并重新写入到队列中以便下次队列取出一个正确的更新值。

相关文章推荐

3道经典的优先队列题

优先队列是一种十分强大的数据结构,它保持了一种动态的有序性,对于不断改变有入队的操作,而又需要某种最大或最小的操作的问题是再合适不过了,通常优先队列的实现是由最小堆或者最大堆完成的,并通过堆排序保持队...

例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)

这里综合运用了Set 和 优先队列: 整体思路: 凡是2,3,5的倍数的都是丑数,所以可以开一个优先队列(整数越小,优先级越高),先插入1,在插入用1乘以2,3,5得到2,3,5的倍数,然后把优先...

文章标题

关联规则挖掘 一、基本概念 用一个超市购物车的例子来帮助理解 项目集(items):{I1.I2.I3...}超市里所有商品的集合; 事务(tranzation):一...

简单的IO流~~

写在前面的话:以前总是不清楚字符字节流的相关对象及属性,也一直没有认真去学习,今天总算弄清楚了一点...

例题3.3 阿格斯 UVa1203

1.题目描述:点击打开链接 2.解题思路:本题利用优先队列解决。根据题意,优先出列的是时间靠前的时间,如果当有多个事件同时发生,那么再考虑Qnum小的事件优先出列。本题有一个重要的技巧,就是每次出列...

《算法竞赛入门经典2ndEdition 》例题5-6 团体队列(Team Queue, Uva540)

先来说说自己对这道题的领悟。 首先,这题使用STL的思路我通过自己的思考能够想到我觉得后面的实现其实不成问题(个人想了很久才想到这样使用STL,第一开始还以为得直接用list呢),然而过程中还是...

优先队列算法实现(Java)

  • 2009年06月01日 12:49
  • 4KB
  • 下载

普林姆算法(用优先队列)

  • 2014年06月12日 13:48
  • 2KB
  • 下载

算法竞赛入门经典(第2版)例题4-6 师兄帮帮忙 (A Typical Homework UVa 12412)

这道例题书上要求自己补全daim有个bug卡了我
  • archya
  • archya
  • 2014年08月02日 08:07
  • 1525

优先队列与分支限界算法

  • 2011年06月11日 23:54
  • 149KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法竞赛入门经典例题-优先队列(阿格斯)
举报原因:
原因补充:

(最多只允许输入30个字)