#include <cstdio>
#include <queue>
struct task
{
int number;
int need;
int get;
int grade;
inline bool operator < (const task &b) const
{
return this->grade<b.grade||(this->grade==b.grade&&this->get>b.get);
}
};
std::priority_queue<task,std::vector<task>,std::less<task>> wait;
int main()
{
int num,get,times,grade;
int time=-1;
while(scanf("%d%d%d%d",&num,&get,×,&grade)!=EOF)
{
while((!wait.empty())&&time+wait.top().need<=get)
{
time+=wait.top().need;
printf("%d %d\n",wait.top().number,time);
wait.pop();
}
if(!wait.empty())
{
task cache=wait.top();
wait.pop();
cache.need-=get-time;
wait.push(cache);
}
wait.push({num,times,get,grade});
time=get;
}
while(!wait.empty())
{
time+=wait.top().need;
printf("%d %d\n",wait.top().number,time);
wait.pop();
}
return 0;
}
转载自本人Luogu Blog的这篇文章
本文深入探讨了一种基于优先级的任务调度算法实现,通过C++代码示例,详细讲解了如何利用优先队列来管理和调度不同优先级的任务。文章涵盖了任务结构定义、优先级比较、任务入队与出队的逻辑,以及如何处理任务执行时间冲突等问题。
874

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



