[SNOI2024] 拉丁方

Luogu
IDLGP10062
Time5000ms
Memory1024MB
DifficultyP7
各省省选2024Special JudgeO2优化陕西
我们定义一个 $n \times n$ 的矩阵 $A$ 为拉丁方,当且仅当,每行每列都是一个 $1 \sim n$ 的排列。 现在给你一个矩阵 $A$ 左上角的一个 $R \times C$ 的子矩阵,也就是 $A_{i, j}$($1 \le i \le R$,$1 \le j \le C$)。问能不能将剩下的位置填上数使得它是一个拉丁方。 ## Input 多组测试数据,第一行一个整数 $T$ 表示测试数据组数。 对于每组测试数据,第一行三个整数 $n, R, C$ 表示矩阵大小和已知的矩阵大小。 接下来 $R$ 行,每行 $C$ 个数,其中第 $i$ 行的第 $j$ 个数表示 $A_{i, j}$。 ## Output 对于每组数据,第一行输出一个字符串 `Yes` 或者 `No`,表示能否找到满足条件的拉丁方。 如果能找到满足条件的拉丁方,那么在接下来 $n$ 行,每行输出 $n$ 个数,表示一个满足条件的拉丁方。如果有多组满足条件的方案,输出任意一种即可。 [samples] ## Note **【样例 \#1 解释】** 在第一个样例中,对于第二组数据,根据前两行可以发现,$A_{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 \sim 7$ 的条件限制。 --- **【样例 \#3】** 见附件中 `latin/latin3.in` 与 `latin/latin3.ans`,这个样例满足测试点 $11 \sim 12$ 的条件限制。 --- **【数据范围】** 对于所有的数据,保证 $1 \le T \le 10$,$1 \le n \le 500$,$1 \le R, C \le n$,$1 \le A_{i, j} \le n$,保证输入的子矩阵不存在一行或者一列有两个相同的数。 具体如下: | 测试点编号 | $n \le$ | 特殊性质 | |:-:|:-:|:-:| | $1 \sim 2$ | $6$ | 无 | | $3 \sim 4$ | $10$ | 无 | | $5$ | $500$ | A | | $6 \sim 7$ | $100$ | B | | $8 \sim 9$ | $300$ | B | | $10$ | $500$ | B | | $11 \sim 12$ | $500$ | C | | $13 \sim 14$ | $100$ | 无 | | $15 \sim 16$ | $300$ | 无 | | $17 \sim 20$ | $500$ | 无 | 特殊性质 A:保证 $R = 1$。 特殊性质 B:保证 $C = n$。 特殊性质 C:保证 $R, C \le \frac{n}{2}$。
Samples
Input #1
3
2 1 1
1
3 2 2
1 2
2 1
5 2 3
1 2 3
4 3 2
Output #1
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
API Response (JSON)
{
  "problem": {
    "name": "[SNOI2024] 拉丁方",
    "description": {
      "content": "我们定义一个 $n \\times n$ 的矩阵 $A$ 为拉丁方,当且仅当,每行每列都是一个 $1 \\sim n$ 的排列。 现在给你一个矩阵 $A$ 左上角的一个 $R \\times C$ 的子矩阵,也就是 $A_{i, j}$($1 \\le i \\le R$,$1 \\le j \\le C$)。问能不能将剩下的位置填上数使得它是一个拉丁方。",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 5000,
      "memory_limit": 1048576
    },
    "difficulty": {
      "LuoguStyle": "P7"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP10062"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "我们定义一个 $n \\times n$ 的矩阵 $A$ 为拉丁方,当且仅当,每行每列都是一个 $1 \\sim n$ 的排列。\n\n现在给你一个矩阵 $A$ 左上角的一个 $R \\times C$ 的子矩阵,也就是 $A_{i, j}$($1 \\le i \\le R$,$1 \\le j \\le C$)。问能不能将剩下的位置填上数使得它是一个拉丁方。\n\n## Input\n\n多组测试数据,第一行一个整数 ...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments