#CCSP2024A. I/O 任务调度队列

I/O 任务调度队列

我们在原题的基础上添加了额外声明,试图消除原题在理解上的歧义。但是赛时具体的额外描述遗失,我们只能尽量做到还原题意。

时间限制: 1.0 秒

空间限制: 512 MB

题目描述

现在,你的计算机系统里面有一个存储设备,该存储设备能够通过两个独立的通道对文件进行读写。

通道对于应用发起的任务会采用队列的方式来处理,先提交到队列的任务先处理

如果一个任务被提交到对应的通道上时,前面的任务还没完成,该任务需要等待前面任务完成后才能被处理。

请你设计一个系统,对于到达的任务(包含任务到达时间,以及完成对应任务所需的时间),将其分发到两个队列。

如果中间存在空白(如第一通道中间没任务提交,但是后续有任务提交上来),中间空白的时间算在时延内。

即,通道的时延按照通道上最后一个完成的任务的时间计算。

注意,任务到达时间不等于提交到队列的时间。一个后到达的任务如果先提交到队列,则先进行处理。

请设计系统,使得最终完成所有任务的时延最小,即两个通道完成所有任务时延最大的值最小。在最大的通道时延最小的情况下,保证另一个通道的时延最小。

例如,如果存在一组队列的分发,通道 1 的时延为 50 的情况下,通道2 的时延可以为 20 或 30,则通道 2 应使用 20 的时延的任务提交方式。

以下为本题的额外声明:

  • 任务到达时已经按照此时的状态(当前队列完成时间长短)进行了提交(任务总是在到达时向着较小的那个队列进行发射)。
  • 不保证任务的到达时间随任务编号递增,且不同任务到达时间可能相同。
  • 在处理任务时,不需要按照任务编号顺序完成,而是按照到达时间的先后顺序尽可能快地进行处理

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 nn

接下来 nn 行,每行包括一个自然数,为任务到达的时间。提交到存储设备队列的任务所需的时间均为 10。注意,任务的到达时间的顺序可能有重叠(同一时间可能到达多个任务),或者乱序(输入中的到达时间不是严格递增的)。

输出格式

输出到标准输出。

输出两个自然数,分别对应两个队列完成最后一个任务的时间,先输出小的时间,再输出大的时间。

3
1
2
4
12 21

样例 1 解释

第 1 和第 3 个任务被提交到第一个队列。任务 1 在时刻 1 到达,时刻 11 完成;任务 3 在时刻 4 到达,最终的完成时间为 21。第 2 个任务被提交到第二个队列:第 2 个任务在时刻 2 到达,时刻 12 完成。

最终的结果是 12 和 21。

子任务

本题包含 10 个测试用例,nn 不大于10310^3,且所有到达时间不超过 10410^4,保证答案最大不超过 10610^6