luogu#P10062. [SNOI2024] 拉丁方
[SNOI2024] 拉丁方
题目描述
我们定义一个 的矩阵 为拉丁方,当且仅当,每行每列都是一个 的排列。
现在给你一个矩阵 左上角的一个 的子矩阵,也就是 (,)。问能不能将剩下的位置填上数使得它是一个拉丁方。
输入格式
多组测试数据,第一行一个整数 表示测试数据组数。
对于每组测试数据,第一行三个整数 表示矩阵大小和已知的矩阵大小。
接下来 行,每行 个数,其中第 行的第 个数表示 。
输出格式
对于每组数据,第一行输出一个字符串 Yes
或者 No
,表示能否找到满足条件的拉丁方。
如果能找到满足条件的拉丁方,那么在接下来 行,每行输出 个数,表示一个满足条件的拉丁方。如果有多组满足条件的方案,输出任意一种即可。
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 解释】
在第一个样例中,对于第二组数据,根据前两行可以发现,,所以不存在满足条件的拉丁方。
对于第三组数据,可以发现输出是一个满足条件的拉丁方,并且左上角是输入的矩阵。下面也是一个满足条件的方案。
$$\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
,这个样例满足测试点 的条件限制。
【样例 #3】
见附件中 latin/latin3.in
与 latin/latin3.ans
,这个样例满足测试点 的条件限制。
【数据范围】
对于所有的数据,保证 ,,,,保证输入的子矩阵不存在一行或者一列有两个相同的数。
具体如下:
测试点编号 | 特殊性质 | |
---|---|---|
无 | ||
A | ||
B | ||
C | ||
无 | ||
特殊性质 A:保证 。
特殊性质 B:保证 。
特殊性质 C:保证 。