49-任务系统

xiaoxiao2021-02-28  55

问题描述:

蒜头君设计了一个任务系统。这个系统是为了定时提醒蒜头君去完成一些事情。

系统大致如下,初始的时候,蒜头君可能会注册很多任务,每一个任务的注册如下:

Register Q_num Period

表示从系统启动开始,每过 Period 秒提醒蒜头君完成编号为 Qnum 的任务。

你能计算出蒜头君最先被提醒的 k 个任务吗?

输入格式

第一行输入 n(0<n3000)k(0<k10000),其中 n 表示蒜头君注册的任务数量。

接下来 nn 行,每行输入一条注册命令,其中 0<qnum30000Period3000

输出格式

顺序输出 k 行,表示依次提醒的任务的编号。如果同一时间有多个任务,最先提醒编号小的任务。

样例输入

2 5 Register 2004 200 Register 2005 300

样例输出

2004 2005 2004 2004 2005

代码解析:

// // main.cpp // renwuxitong // // Created by apple on 2018/3/15. // Copyright © 2018年 apple. All rights reserved. // #include <iostream> #include <queue> #include <cstring> using namespace std; /* 定义一个结构体 */ struct Node{ int Q,period,period_o;//period_o为变化的值 //重点,权值小的在前,相同时间,比编号,小的在前 bool operator<(const Node &rhs)const{ return period_o>rhs.period_o || (period_o==rhs.period_o && Q>rhs.Q); } }; int main() { priority_queue<Node> q; Node node; int n,k;//n个任务,k个值 cin>>n>>k; string s;// int a,b;// //赋初值 for(int i=0;i<n;i++){ cin>>s>>a>>b; node.Q=a; node.period=b; node.period_o=b; q.push(node); } //output for(int i=0;i<k;i++){ node=q.top(); q.pop(); cout<<node.Q<<endl; //时间变化 node.period_o+=node.period; q.push(node); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2632446.html

最新回复(0)