思路
用堆维护每个触发器的下一个事件,每次取出一个事件再把对应触发器的下一个事件加入堆即可
代码
#include#include #include #include #include #include using namespace std;struct QNode{ int time,num,Period; bool operator < (const QNode &b) const{ return (time==b.time)?num>b.num:time>b.time; }};priority_queue q;int main(){ string s; while(cin>>s&&s=="Register"){ int num,pro; scanf("%d %d",&num,&pro); q.push((QNode){pro,num,pro}); } int k; scanf("%d",&k); for(int i=1;i<=k;i++){ printf("%d\n",q.top().num); QNode x=q.top(); q.pop(); q.push((QNode){x.time+x.Period,x.num,x.Period}); } return 0;}