题目大意:给你n个触发器,每个触发器都有标号和间隔时间,然后要求你依据触发事件输出前k个触发器的标号,如果触发时间相同,就输出编号小的那个
解题思路:优先队列的模板题
#include<cstdio>
#include<queue>
using namespace std;
struct Item {
int QNum, Period, Time;
bool operator < (const Item &s) const {
return Time > s.Time || (Time == s.Time && QNum > s.QNum);
}
};
int main() {
priority_queue<Item> pq;
char temp[20];
while(scanf("%s",temp) != EOF && temp[0] != '#') {
Item item;
scanf("%d%d",&item.QNum,&item.Period);
item.Time = item.Period ;
pq.push(item);
}
int K;
scanf("%d",&K);
while(K--) {
Item t = pq.top();
pq.pop();
printf("%d\n",t.QNum);
t.Time += t.Period;
pq.push(t) ;
}
return 0;
}