- 题目大意
有一系列的事件,它每Period秒钟就会产生编号为qNum的事件,你的任务是模拟出前k个事件,如果多个事件同时发生,先处理qNum小的事件
- 解题思路
很多相同的数值在同一时刻内,数值小的先输出,那么就是求若干个中最小的,那么就可以用优先队列进行维护。
- 代码
#include<cstdio> #include<queue> using namespace std; char str[10]; struct Edge { int id,t,tt; bool operator< (Edge e)const { return(tt>e.tt)||(tt==e.tt&&id>e.id); } }; int main() { priority_queue<Edge>q; int n,m; while(scanf("%s",str)!=EOF) { if(str[0]==‘#‘) break; Edge e; scanf("%d%d",&e.id,&e.t); e.tt=e.t; q.push(e); } scanf("%d",&n); while(n--) { Edge e=q.top(); q.pop(); printf("%d\n",e.id); e.tt=e.tt+e.t; q.push(e); } return 0; }