Argus--[优先队列]
Description
Query-1: "Every five minutes, retrieve the maximum temperature over the past five minutes."
Query-2: "Return the average temperature measured on each floor over the past 10 minutes."
We have developed a Data Stream Management System called Argus, which processes the queries over the data streams. Users can register queries to the Argus. Argus will keep the queries running over the changing data and return the results to the corresponding user with the desired frequency.
For the Argus, we use the following instruction to register a query:
Register Q_num Period
Q_num (0 < Q_num <= 3000) is query ID-number, and Period (0 < Period <= 3000) is the interval between two consecutive returns of the result. After Period seconds of register, the result will be returned for the first time, and after that, the result will be returned every Period seconds.
Here we have several different queries registered in Argus at once. It is confirmed that all the queries have different Q_num. Your task is to tell the first K queries to return the results. If two or more queries are to return the results at the same time, they will return the results one by one in the ascending order of Q_num.
Input
The second part is your task. This part contains only one line, which is one positive integer K (<= 10000).
Output
Sample Input
- Register 2004 200
- Register 2005 300
- #
- 5
Sample Output
- 2004
- 2005
- 2004
- 2004
- 2005
- 解题思路:
假设绝对时间T,容易发现,对每一个query,每当T增加period时就会进行输出。我们不妨这样想,每次输出的query都是离下一次输出需要时间最少的。那么我们就可以采用优先队列存储query,记下一次输出时间为cnt,cnt越小的query优先级越高,每次取队列头元素,输出之后执行cnt+=period,再存入队列。
注意:
优先队列默认元素越大优先级越高,因此定义静态成员函数‘<’时按大于号来定义。- 代码如下:
- #include <iostream>
- #include <time.h>
- #include <queue>
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #define _clock (double(clock())/CLOCKS_PER_SEC)
- using namespace std;
- char buff[];
- struct query{
- int Q_num;
- int Period;
- int cnt;
- query(int q=,int p=):Q_num(q),Period(p){cnt=Period;}
- bool operator <(const query& a)const {
- return (cnt>a.cnt)||((cnt==a.cnt)&&Q_num>a.Q_num);
- }
- };
- priority_queue<query> u;
- int q,p,k;
- int main(){
- while(scanf("%s",buff)==&&buff[]!='#'){
- scanf("%d%d",&q,&p);
- u.push(query(q,p));
- }
- scanf("%d",&k);
- while(k--){
- query a=u.top();u.pop();
- cout<<a.Q_num<<endl;
- a.cnt+=a.Period;
- u.push(a);
- }
- //cout<<"time : "<<_clock<<endl;
- return ;
- }
Argus--[优先队列]的更多相关文章
- [caffe]linux下安装caffe(无cuda)以及python接口
昨天在mac上折腾了一天都没有安装成功,晚上在mac上装了一个ParallelDesktop虚拟机,然后装了linux,十分钟就安装好了,我也是醉了=.= 主要过程稍微记录一下: 1.安装BLAS s ...
- [Swift]基础
[Swift]基础 一, 常用变量 var str = "Hello, playground" //变量 let str1="Hello xmj112288" ...
- [Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]
1. 什么是internationalization(i18n)? 国际化,英文简称i18n,按照维基百科的定义:国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区 ...
- [译]一个灵活的 Trello 敏捷工作流
[译]一个灵活的 Trello 敏捷工作流 翻译自 An Agile Trello Workflow That Keeps Tasks Flexible Getting things done 可不只 ...
- iOS10收集IDFA,植入第三方广告[终结]--ADMob
[PS: 前段时间,公司做ASO推广,需要在应用中收集IDFA值,跟广告平台做交互!于是有了这个需求--] 1.首先,考虑了一下情况(自己懒 -_-#),就直接在首页上写了一个Banner,循环加载广 ...
- Java基础 之软引用、弱引用、虚引用 ·[转载]
Java基础 之软引用.弱引用.虚引用 ·[转载] 2011-11-24 14:43:41 Java基础 之软引用.弱引用.虚引用 浏览(509)|评论(1) 交流分类:Java|笔记分类: Ja ...
- CSU 1642 Problem B[难][前缀和]
Description 已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数. Input 多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1 ...
- [ufldl]Supervised Neural Networks
要实现的部分为:forward prop, softmax函数的cost function,每一层的gradient,以及penalty cost和gradient. forwad prop forw ...
- [干货]2017已来,最全面试总结——这些Android面试题你一定需要
地址.http://blog.csdn.net/xhmj12/article/details/54730883 相关阅读: 吊炸天!74款APP完整源码! [干货精品,值得收藏]超全的一线互联 ...
随机推荐
- (续)使用Django搭建一个完整的项目(Centos7+Nginx)
django-admin startproject web cd web 2.配置数据库(使用Mysql) vim web/settings.py #找到以下并按照实际情况修改 DATABASES = ...
- 【软件安装】我喜欢的notepad插件
1.文件管理器 explorer 2.16进制查看文件工具 HEX-Editor
- 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子
题目描述 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝之 ...
- Directx11教程(11) 增加一个debug宏
原文:Directx11教程(11) 增加一个debug宏 现在我们在common.h中增加一个debug的宏,在每个d3d11函数后调用,如果d3d函数出错,它能够给出程序中错误的代码行 ...
- pycharm 的简单操作
pycharm常用 快捷键 ctrl + q 快速查看文档 ctrl + 鼠标左键 进入代码定义 CTRL + F1 显示错误描述或警告信息 F3 下一个 Shift + F3 前一个 Ctrl + ...
- 【Linux】 经典Linux系统工程师面试题(转载)
1.如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0: 答: # iptables -t nat -A PREROUTING -d 192.16 ...
- 用GitHub Pages搭了个博客,欢迎来玩~
Welcome to visit my new blog https://luoxiaolei.github.io/ Ps. 后续的blog会优先更新到GitHub Pages上.
- 利用微信提高APP下载的3个推广方式!
http://www.cocoachina.com/market/20150615/12149.html 走进移动互联网时代,各式各样App层出不穷,开发者们已经早一步走在了我们前面,为我们想到了一切 ...
- django之请求方法
Http1.0定义了三种请求方法:GET,POST和HEAD方法 Http1.1新增了五种请求方式:OPTIONS,PUT,DELETE,TRACE和CONNECT方法 ----get ...
- 公司安装mariaDB-5.5.52和Jdk 7
转自:http://www.cnblogs.com/kgdxpr/p/3209009.html vi /etc/yum.repos.d/MariaDB.repo 加入下面内容 [mariabd]nam ...