#4552. D. Creating a Schedule
D. Creating a Schedule
当前没有测试数据。
D. Creating a Schedule
(创建课程表)
题目描述
新学期即将开始,需要为第一天制定课程表。学院共有 个小组和 间教室。已知每个小组第一天恰好有 6 节课,且所有小组的第 节课在同一时间进行。每节课必须在某间教室进行,且同一时间同一教室最多只能有一个小组上课。
每间教室都有自己的编号(至少三位数字),编号中除了最后两位数字外,其余部分表示教室所在的楼层。例如:
- 教室 479 的最后两位是 79,剩余部分为 4,因此位于 4 楼;
- 教室 31415 的最后两位是 15,剩余部分为 314,因此位于 314 楼。
楼层之间可以通过楼梯移动:
- 对于任意楼层 ,可以上下移动到 或 楼;
- 1 楼只能向上移动到 2 楼;
- 楼(最高楼)只能向下移动到 9999999 楼。
学院教务处决定制定这样的课程表:最大化所有小组的总楼层移动次数。学生从一个楼层移动到另一个楼层时,会选择最短路径(即移动次数等于两层楼的差值绝对值)。
例如,当 、,教室编号为 [479, 290, 478, 293] 时,课程表可以安排如下:
| 课程编号 | 小组 1 | 小组 2 |
|---|---|---|
| 1 | 290 | 293 |
| 2 | 478 | 479 |
| 3 | 293 | 290 |
| 4 | 479 | 478 |
| 5 | 293 | 290 |
| 6 | 479 | 478 |
在这个课程表中,两个小组每次都在 2 楼和 4 楼之间移动(每层教室的楼层计算:290→2 楼,478→4 楼,293→2 楼,479→4 楼):
- 每个小组每两节课的移动次数为 ;
- 每个小组 6 节课共有 5 次移动,总移动次数为 (2 个小组 × 5 次移动 × 每次 2 层)。
请帮助教务处制定任意一个满足要求的课程表!
输入格式
第一行包含一个整数 ()—— 测试用例的数量。
每个测试用例的输入如下:
- 第一行包含两个整数 和 ()—— 小组数量和教室数量;
- 第二行包含 个整数 ()—— 可用教室的编号,所有编号互不相同。
输入约束:
- 所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出 行,第 行包含 6 个整数——第 个小组 6 节课的教室编号。
要求:同一时间(同一课程编号)的同一教室不能被多个小组使用。
样例输入
3
2 4
479 290 478 293
1 1
31415
6 10
479 385 290 293 384 383 297 478 291 382
样例输出
290 478 293 479 293 479
293 479 290 478 290 478
31415 31415 31415 31415 31415 31415
479 290 479 290 479 290
290 479 290 479 290 479
293 478 293 478 293 478
297 385 297 385 297 385
478 293 478 293 478 293
291 384 291 384 291 384
样例解释
样例 1 解释
- 教室楼层计算:290(2 楼)、478(4 楼)、293(2 楼)、479(4 楼);
- 小组 1 的课程序列:2 楼 → 4 楼 → 2 楼 → 4 楼 → 2 楼 → 4 楼,移动次数为 ;
- 小组 2 的课程序列:2 楼 → 4 楼 → 2 楼 → 4 楼 → 2 楼 → 4 楼,移动次数为 ;
- 总移动次数:,符合题目要求。
样例 2 解释
- 仅有 1 间教室,小组 1 的 6 节课只能使用该教室;
- 每次课程都在同一楼层,移动次数为 0(无法进行更多移动)。
样例 3 解释
- 共 6 个小组,10 间教室,每两个小组配对使用不同楼层的教室(如 479 与 290、293 与 478 等);
- 每个小组的课程序列交替使用两个不同楼层的教室,最大化移动次数,总移动次数为 50(符合题目提示)。
说明
- 输出的课程表只需满足“最大化总移动次数”和“同一时间同一教室不重复使用”,无需唯一解;
- 最大化移动次数的核心策略:让每个小组的 6 节课在两个尽可能远的楼层之间交替切换(如最高楼和最低楼),且同一时间的教室分配不冲突。