题意:有一系列的事件,它每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;
}