LA 3135 阿格斯(优先队列)

时间:2023-03-10 07:11:57
LA 3135 阿格斯(优先队列)

https://vjudge.net/problem/UVALive-3135

题意:

你的任务是编写一个称为Argus的系统。该系统支持一个Register的命令

Register Q_num Period

该命令注册了一个触发器,它每Period秒钟就会产生一次编号为Q_num的事件。你的任务是模拟出前k个事件。如果多个事件同时发生,先处理Q_num小的事件。

思路:
题目很简单,一个优先队列解决。

 #include<iostream>
#include<cstring>
#include<queue>
using namespace std; struct node
{
int Q_num, Period, Time;
bool operator < (const node& rhs) const
{
return Time>rhs.Time || (Time == rhs.Time && Q_num > rhs.Q_num);
}
}; char s[]; int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int x, y, k;
priority_queue<node> q;
while (cin >> s)
{
if (s[] == '#') break;
cin >> x >> y;
node u;
u.Q_num = x;
u.Period = y;
u.Time = y;
q.push(u);
}
cin >> k;
while (k--)
{
node u = q.top();
q.pop();
cout << u.Q_num << endl;
u.Time += u.Period;
q.push(u);
}
}