#P10062. [SNOI2024] 拉丁方

    ID: 11444 远端评测题 5000ms 1024MiB 尝试: 0 已通过: 0 显示难度NOI/NOI+/CTS 上传者: 标签>各省省选2024Special JudgeO2优化陕西

[SNOI2024] 拉丁方

题目描述

我们定义一个 n×nn \times n 的矩阵 AA 为拉丁方,当且仅当,每行每列都是一个 1∼n1 \sim n 的排列。

现在给你一个矩阵 AA 左上角的一个 R×CR \times C 的子矩阵,也就是 Ai,jA_{i, j}(1≤i≤R1 \le i \le R,1≤j≤C1 \le j \le C)。问能不能将剩下的位置填上数使得它是一个拉丁方。

输入格式

多组测试数据,第一行一个整数 TT 表示测试数据组数。
对于每组测试数据,第一行三个整数 n,R,Cn, R, C 表示矩阵大小和已知的矩阵大小。
接下来 RR 行,每行 CC 个数,其中第 ii 行的第 jj 个数表示 Ai,jA_{i, j}。

输出格式

对于每组数据,第一行输出一个字符串 Yes 或者 No,表示能否找到满足条件的拉丁方。
如果能找到满足条件的拉丁方,那么在接下来 nn 行,每行输出 nn 个数,表示一个满足条件的拉丁方。如果有多组满足条件的方案,输出任意一种即可。

3
2 1 1
1
3 2 2
1 2
2 1
5 2 3
1 2 3
4 3 2

Yes
1 2
2 1
No
Yes
1 2 3 4 5
4 3 2 5 1
2 4 5 1 3
3 5 1 2 4
5 1 4 3 2

提示

【样例 #1 解释】

在第一个样例中,对于第二组数据,根据前两行可以发现,A1,3=A2,3=3A_{1, 3} = A_{2, 3} = 3,所以不存在满足条件的拉丁方。

对于第三组数据,可以发现输出是一个满足条件的拉丁方,并且左上角是输入的矩阵。下面也是一个满足条件的方案。

$$\begin{bmatrix} 1 & 2 & 3 & 5 & 4 \\ 4 & 3 & 2 & 1 & 5 \\ 3 & 5 & 1 & 4 & 2 \\ 2 & 4 & 5 & 3 & 1 \\ 5 & 1 & 4 & 2 & 3 \end{bmatrix}$$

【样例 #2】

见附件中 latin/latin2.in 与 latin/latin2.ans,这个样例满足测试点 6∼76 \sim 7 的条件限制。


【样例 #3】

见附件中 latin/latin3.in 与 latin/latin3.ans,这个样例满足测试点 11∼1211 \sim 12 的条件限制。


【数据范围】

对于所有的数据,保证 1≤T≤101 \le T \le 10,1≤n≤5001 \le n \le 500,1≤R,C≤n1 \le R, C \le n,1≤Ai,j≤n1 \le A_{i, j} \le n,保证输入的子矩阵不存在一行或者一列有两个相同的数。

具体如下:

测试点编号 n≤n \le 特殊性质
1∼21 \sim 2 66 无
3∼43 \sim 4 1010
55 500500 A
6∼76 \sim 7 100100 B
8∼98 \sim 9 300300
1010 500500
11∼1211 \sim 12 C
13∼1413 \sim 14 100100 无
15∼1615 \sim 16 300300
17∼2017 \sim 20 500500

特殊性质 A:保证 R=1R = 1。
特殊性质 B:保证 C=nC = n。
特殊性质 C:保证 R,C≤n2R, C \le \frac{n}{2}。