UVA - 1203 Argus

来源:互联网 发布:淘宝动态评分提高 编辑:程序博客网 时间:2024/06/03 23:21

题目大意:一个成为Argus的系统,支持一个Register命令: Register Q_num Period

该命令为一个祖册出发器,每Period产生一次Q_num的时间。要求模拟k个事件,如果多个事件同时发生,现处理Q_num小的。

解题思路:用优先队列维护即可,队列中按照时间小的优先,时间相同的比较Q_num,每次处理完一个时间,对应的将时间的时间加上period后放回队列中,表示下一次出发器生成的时间。


#include <cstdio>#include <queue>using namespace std;struct Item {int Q_num, Period, Time;bool operator < (const Item& a) const {return a.Time < Time || (a.Time == Time && a.Q_num < Q_num);}};int main() {char S[30];int Q_num, Period, K;priority_queue<Item> pq;Item item;while (scanf("%s", S) && S[0] != '#') {scanf("%d%d", &item.Q_num, &item.Period);item.Time = item.Period;pq.push(item);}scanf("%d", &K);while (K--) {item = pq.top();printf("%d\n", item.Q_num);pq.pop();item.Time += item.Period;pq.push(item);}return 0;}


0 0
原创粉丝点击