UOJ Logo

NOI.AC

1S 512MB

#1686. 循环调度

统计

描述

现有n个任务按顺序进入队列,CPU通过循环调度法逐一处理这些任务,每个任务最多处理q毫秒。如果q毫秒之后任务尚未处理完,那么该任务将被移动至队伍的最末尾,CPU随即开始处理下一个任务。 例如,假设q是100,有如下任务序列: A(150)-B(80)-C(200)-D(200) 首先,A被处理100ms,然后带着剩余的50ms移到队尾。 B(80)-C(200)-D(200)-A(50) B被处理,在180ms时完成,B移出队列。 C(200)-D(200)-A(50) C被处理,剩余100ms移至队尾。 D(200)-A(50)-C(100) 之后同样处理,一直到所有的任务处理完毕。 请编写一个程序,模拟循环调度法。

输入

第一行,两个整数n和q。接下来n行整数,表示每个任务处理需要的时间t。

输出

按照任务完成的先后顺序输出各个任务完成时的结束时间,一行一个整数。

输入样例

5 100 150 80 200 350 20

输出样例

180 400 450 550 800

数据说明

1<=n<=100000 1<=q<=1000 1<=t<=50000