题意:有一系列的事件,它每Period秒钟就会产生编号为qNum的事件,你的任务是模拟出前k个事件,如果多个事件同时发生,先处理qNum小的事件
思路:用优先队列模拟
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; struct item{ int qNum,Per,Time; bool operator <(const item &a) const{ return Time > a.Time || (Time == a.Time && qNum > a.qNum); } }; int main(){ priority_queue<item> pq; char a[20]; while (scanf("%s",a) != EOF && a[0] != ‘#‘){ item it; scanf("%d%d",&it.qNum,&it.Per); it.Time = it.Per; pq.push(it); } int K; scanf("%d",&K); while (K--){ item r = pq.top(); pq.pop(); printf("%d\n",r.qNum); r.Time += r.Per; pq.push(r); } return 0; }
原文:http://blog.csdn.net/u011345136/article/details/19334055