P9890 [ICPC 2018 Qingdao R] Tournament

题目描述

DreamGrid,Gridland 的国王,正在举办一场骑士锦标赛。有 $n$ 名骑士,编号从 1 到 $n$,参加这次锦标赛。锦标赛的规则如下: - 锦标赛由 $k$ 轮组成。每一轮由若干场决斗组成。每场决斗恰好在两名骑士之间进行。 - 每名骑士在每一轮中必须参加一场决斗。 - 对于每对骑士,在所有 $k$ 轮中最多只能有一场决斗。 - 设 $1 \le i, j \le k$,$i \neq j$,且 $1 \le a, b, c, d \le n$,$a, b, c, d$ 是四个不同的整数。如果 - 骑士 $a$ 在第 $i$ 轮对战骑士 $b$,并且 - 骑士 $c$ 在第 $i$ 轮对战骑士 $d$,并且 - 骑士 $a$ 在第 $j$ 轮对战骑士 $c$, - 那么骑士 $b$ 必须在第 $j$ 轮对战骑士 $d$。 作为 DreamGrid 的将军,你需要编写一个程序来安排所有 $k$ 轮中的所有决斗,以便结果安排满足上述规则。

输入格式

有多个测试用例。输入的第一行是一个整数 $T$,表示测试用例的数量。对于每个测试用例: 第一行包含两个整数 $n$ 和 $k$ ($1 \le n, k \le 1000$),表示参加锦标赛的骑士数量和轮数。 保证所有测试用例中 $n$ 和 $k$ 的总和不超过 5000。

输出格式

对于每个测试用例: - 如果可以进行有效的安排,输出 $k$ 行。在第 $i$ 行,输出 $n$ 个整数 $c_{i, 1}, c_{i, 2}, \dots, c_{i, n}$,用空格分隔,表示在第 $i$ 轮中,骑士 $j$ 将与骑士 $c_{i, j}$ 对战,所有 $1 \le j \le n$。如果有多个有效答案,输出字典序最小的答案。考虑两个答案 $A$ 和 $B$,记 $a_{i, j}$ 为答案 $A$ 中第 $i$ 行的第 $j$ 个整数,$b_{i, j}$ 为答案 $B$ 中第 $i$ 行的第 $j$ 个整数。答案 $A$ 在字典序上小于答案 $B$,如果存在两个整数 $p$ ($1 \le p \le k$) 和 $q$ ($1 \le q \le n$),使得 - 对于所有 $1 \le i < p$ 和 $1 \le j \le n$,$a_{i, j} = b_{i, j}$,并且 - 对于所有 $1 \le j < q$,$a_{p, j} = b_{p, j}$,最终 $a_{p, q} < b_{p, q}$。 - 如果无法进行有效的安排,输出一行 “Impossible”(不带引号)。 请不要在每行末尾输出多余的空格,否则你的答案可能会被视为不正确!

说明/提示

题面翻译由 ChatGPT-4o 提供。