#12300. 队列调度 (Queue)
队列调度 (Queue)
队列调度 (Queue)
时间限制: 1 秒 内存限制: 131072 KB
题目描述
有 n 个进程排成一个队列。每个进程有一个名称 name_i
和执行所需的时间 time_i
(单位:毫秒)。
采用轮转调度算法Round-Robin Scheduling来处理这些进程。调度器会依次处理队列中的进程,并为每个进程分配一个固定的时间片(quantum
,单位:毫秒)。
处理规则如下:
- 调度器从队首取出一个进程,执行时间片长度的任务。
- 如果该进程在时间片内完成,则记录它的完成时间并从队列中移除;
- 如果该进程未完成,则将它的剩余时间更新后,放到队列末尾,等待下一个调度周期。
示例说明
设时间片 q = 100 ms
,队列如下:
A(150) - B(80) - C(200) - D(200)
- 第一步:
处理 A 100ms,剩余 50ms,移到队尾:
B(80) - C(200) - D(200) - A(50)
- 第二步:
处理 B 80ms,B 完成,结束时间为 180ms,移出队列:
C(200) - D(200) - A(50)
- 按此方式持续执行,直到所有进程完成。
输入格式
n q
name1 time1
name2 time2
...
namen timen
- 第一行:两个整数
n
和q
,表示进程数量和时间片长度; - 接下来
n
行:每行一个进程的name_i
(不超过 10 个字符)和time_i
(正整数)。
输出格式
对于每个进程,按其完成顺序输出:
name finish_time
name
:进程名称finish_time
:进程完成的时间(单位:毫秒)
数据范围
样例输入 1
5 100
p1 150
p2 80
p3 200
p4 350
p5 20
样例输出 1
p2 180
p5 400
p1 450
p3 550
p4 800