POJ2051 Argus

来源:互联网 发布:知乎 那些有深度的网名 编辑:程序博客网 时间:2024/06/05 19:12

题意:

你的任务是编写一个称为Argus的系统,该系统支持一个Register命令

Register Q_num Period

该命令注册了一个触发器,它每Period秒钟就会产生一次编号为Q_num的事件。你的任务是模拟出前k个事件。如果多个事件同时发生,先处理Q_num小的事件。

input

       输入仅包含一组数据。前若干行是Register命令,以“#”结尾;最后一行是整数k。对于每条命令,1<=Q_num,Period<=3000。k<=10000。命令条数n不超过1000.

output

       输出k行,即前k个事件的Q_num。


优先队列

code:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>using namespace std;struct term {    int ID_num, times, Period;    bool operator <(const term& t) const {        return times>t.times||(times==t.times&&ID_num>t.ID_num);    }};int main() {    char str[20];    int k;    term tmp;    priority_queue<term> q;    while(scanf("%s",str),str[0]!='#') {        scanf("%d%d",&tmp.ID_num, &tmp.Period);        tmp.times = tmp.Period;        q.push(tmp);    }    scanf("%d",&k);    while(k--) {        tmp = q.top();        q.pop();        printf("%d\n",tmp.ID_num);        tmp.times +=tmp.Period;        q.push(tmp);    }    return 0;}