CF2111D Creating a Schedule

题目描述

新学期即将开始,需要为第一天制定课程表。学院共有 $n$ 个班级和 $m$ 个教室。已知每个班级在第一天恰好有 $6$ 节课,并且所有班级的第 $k$ 节课在同一时间进行。每节课都必须安排在一个教室中,并且同一时间同一个教室不能被多个班级使用。 每个教室都有自己的编号(至少为三位数),该编号除最后两位外的所有数字表示教室所在的楼层。例如,教室 $479$ 位于第 $4$ 层,教室 $31415$ 位于第 $314$ 层。楼层之间可以通过楼梯移动;对于任意楼层 $x>1$,可以下到 $x-1$ 层,也可以上到 $x+1$ 层;从第一层只能上到第二层;从第 $10^7$ 层(即最高层)只能下到第 $9999999$ 层。 院长办公室决定制定课程表,使得学生在楼层间的移动尽可能多,即所有班级在楼层间的总移动次数最大。当学生从一个楼层移动到另一个楼层时,总是选择最短路径。 例如,若 $n=2$,$m=4$,教室编号为 $[479, 290, 478, 293]$,则可以安排如下课程表: $$ \begin{array}{c|cc} \text{节次} & \text{班级1} & \text{班级2} \\ \hline 1 & 290 & 293 \\ 2 & 478 & 479 \\ 3 & 293 & 290 \\ 4 & 479 & 478 \\ 5 & 293 & 290 \\ 6 & 479 & 478 \\ \end{array} $$ 在这样的安排下,两个班级每次都在第 $2$ 层和第 $4$ 层之间移动,总共会有 $20$ 次楼层间的移动。 请帮助院长办公室制定任意一种满足条件的课程表!

输入格式

每个测试点包含若干组测试数据。第一行包含一个整数 $t$($1 \le t \le 10^{3}$),表示测试数据组数。接下来是每组测试数据的描述。 每组测试数据的第一行包含两个整数 $n$ 和 $m$($1 \le n \le m \le 10^{5}$),分别表示班级数和可用教室数。 每组测试数据的第二行包含 $m$ 个整数 $a_i$($100 \le a_i < 10^9$),表示可用教室的编号。 输入的额外约束: - 所有教室编号两两不同; - 所有测试数据中 $m$ 的总和不超过 $10^5$。

输出格式

对于每组测试数据,输出 $n$ 行,每行 $6$ 个整数,表示第 $i$ 个班级每节课所在教室的编号。 每一节课的同一时间,每个教室最多只能被一个班级占用。

说明/提示

在第三组测试数据中,最大移动次数为 $50$。 由 ChatGPT 4.1 翻译