只有一组输入,每行三个数据,第一是指令,第二个是事件编号,第三个是这个事件发生的周期, 以“#”结束;然后输入k
输出前k个发生的事件,如果同时发生,标号小的先输出
代码:
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct item{
int qnum, per, time;
bool operator < ( const item& a ) const {
return time > a.time || ( time == a.time && qnum > a.qnum );
}
};
int main()
{
priority_queue <item> pq;
char s[20];
while ( scanf("%s", s) && s[0] != '#' ) {
item it;
scanf("%d%d", &it.qnum, &it.per );
it.time = it.per;
pq.push(it);
}
int k;
scanf("%d", &k);
while ( k-- ) {
item t = pq.top();
pq.pop();
printf("%d\n", t.qnum);
t.time += t.per;
pq.push(t);
}
}
本文介绍了一种用于处理一组输入数据的事件调度算法,包括指令、事件编号和周期,通过优先级队列实现事件的高效排序和输出。算法在输入数据后,通过优先考虑发生周期短的事件,确保了事件按时间顺序正确处理。
579

被折叠的 条评论
为什么被折叠?



