任务系统

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

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

Register Q_num Period

表示从系统启动开始,每过 P e r i o d Period 秒提醒蒜头君完成编号为 Q n u m Q_{num} 的任务。

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

输入格式

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

接下来 n n 行,每行输入一条注册命令,其中 0 < q n u m 3000 0 < q_{num} \le 3000 0 P e r i o d 3000 0 \le Period \le 3000

输出格式

顺序输出 k k 行,表示依次提醒的任务的编号。

如果同一时间有多个任务,最先提醒编号小的任务。

样例输入

2 5

Register 2004 200

Register 2005 300

样例输出

2004

2005

2004

2004

2005

#include <iostream>
#include<queue>
using namespace std;
struct Node
{	
	int num;
	int Period;
	int time; //初始化 
	bool operator < (const Node & a) const  //重载从小到大 
	{
		if(a.Period==Period)
		{
			return a.num<num;
		}
		else
		{
			return a.Period<Period;
		}
	}
};
int main() {
	int n,k;
	priority_queue<Node> q;
	string str;
	cin>>n>>k;
	Node s;
	for(int i=0;i<n;i++)
	{
		cin>>str>>s.num>>s.Period;
		s.time=s.Period;
		q.push(s);
	}
	for(int j=0;j<k;j++)
	{
		s=q.top();
		q.pop();
		cout<<s.num<<endl;
		s.Period=s.Period+s.time;
		q.push(s);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wait_13/article/details/86632342