E - Argus (UVALive - 3135)
- 题目大意
有一系列的事件,它每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;
}

浙公网安备 33010602011771号