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

原创 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的时候一定要重置时间,并重新写入到队列中以便下次队列取出一个正确的更新值。

Poj—2431 Expedition 优先队列使用经典例题

就像《挑战程序设计竞赛》所说的——在到达加油站之前时,就获得一次在之后加油的权利。简单的说就是,当你经过第 i 个加油站时,先别加油,先压入优先队列,当你到达第 k 个加油站时,计算你车里的油够不够,...
  • NotColdHeike
  • NotColdHeike
  • 2017年08月08日 16:07
  • 112

3道经典的优先队列题

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

经典题:不断求第k大数(巧用优先队列)(网赛)(4006)

The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Ot...
  • qq_33765907
  • qq_33765907
  • 2016年03月13日 15:53
  • 385

优先队列例题

Stones Time Limit : 5000/3000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total ...
  • imzxww
  • imzxww
  • 2017年05月04日 21:04
  • 142

算法竞赛入门经典(第2版)习题2-4详解

#include #define MAXN 100 double a[MAXN]={0};int main() { int n,m,count=0; while(1) { ...
  • big_DreamerLzq
  • big_DreamerLzq
  • 2016年06月22日 10:17
  • 1081

算法竞赛入门经典(第二版)官网页面克隆【墙内用】

链接源地址:https://code.google.com/archive/p/aoapc-book/
  • qq_35504607
  • qq_35504607
  • 2017年03月02日 12:46
  • 747

算法竞赛入门经典例题-并查集

*例题5:有一些化合物,每个化合物都由两种元素组成的(每个元素用一个大写字母表示)。你是一个装箱的工人,从实验员那里按照顺序依次把一些简单化合物装到车上。但这里存在一个安全隐患:如果车上存在k个简单的...
  • u012881011
  • u012881011
  • 2015年07月14日 21:34
  • 534

算法竞赛入门经典第六章例题6-4 Broken Keyboard (a.k.a. Beiju Text) UVA - 11988

https://vjudge.net/problem/UVA-11988 #include #include using namespace std; #pragma warning(disable...
  • Bendaai
  • Bendaai
  • 2018年01月19日 20:33
  • 48

算法竞赛入门经典(第2版)习题5-7 打印队列 UVa12100

思路:用队列queue存储set< pair< int,int > >型的数据(优先级,位置),另外将优先级存储到vector中用于进行优先级的对比。#include #include #includ...
  • xiaoyiman5373
  • xiaoyiman5373
  • 2017年05月26日 14:50
  • 87

算法竞赛入门经典(第二版)-刘汝佳-第七章 暴力求解法 例题(7/15)

说明本文是我对第七章15道例题的练习总结,建议配合紫书——《算法竞赛入门经典(第2版)》阅读本文。 另外为了方便做题,我在VOJ上开了一个contest,欢迎一起在上面做:第七章例题contest ...
  • thudaliangrx
  • thudaliangrx
  • 2016年03月16日 13:17
  • 1614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法竞赛入门经典例题-优先队列(阿格斯)
举报原因:
原因补充:

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