P13619 [ICPC 2024 APC] Duplicates
题目描述
我们称一个数字序列**含有重复元素**,如果序列中存在出现一次以上的元素。形式化地讲,一个序列 $(a_1, \dots, a_n)$ 含有重复元素,如果存在两个不等的下标 $i$ 和 $j$ 使得 $a_i = a_j$。
给定一个 $n \times n$ 的矩阵 $X$。$X$ 中的每个元素都是一个 $1$ 到 $n$ 之间(含两端)的整数。你可以将 $X$ 中零个或多个元素修改为 $1$ 到 $n$ 之间(含两端)的任意整数。不同的元素可以修改为不同的整数。
你的任务是通过修改 $X$ 中的元素,使得以下所有条件都成立:
* 对于每一行 $i$,序列 $(X_{i1}, X_{i2}, \dots, X_{in})$ 含有重复元素。
* 对于每一列 $j$,序列 $(X_{1j}, X_{2j}, \dots, X_{nj})$ 含有重复元素。
你需要计算达成此目标所需的**最小**修改次数。同时,找出一种可行的修改方案。对于每次修改,你需要指明修改的是哪个元素以及它的新值。请注意,当给定的矩阵 $X$ 已经满足上述条件时,所需的最小修改次数可以为零。
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 1000$),代表测试用例的数量。之后是 $t$ 个测试用例。每个测试用例的格式如下。
一个测试用例的第一行包含一个整数 $n$($3 \le n \le 100$)。
接下来的 $n$ 行,每行包含 $n$ 个整数。第 $i$ 行的第 $j$ 个整数代表 $X_{ij}$($1 \le X_{ij} \le n$)。
在单个输入文件中,所有测试用例的 $n^2$ 的总和不超过 $10,000$。
输出格式
对于每个测试用例,按以下格式输出一组修改方案。
第一行输出一个整数 $m$,代表需要修改的元素的最小数量。
在接下来的 $m$ 行中,每行输出三个整数 $i, j, v$。这代表一次修改,即将元素 $X_{ij}$ 的值修改为 $v$。这三个整数都必须在 $1$ 和 $n$ 之间(含两端)。
如果存在多种解法,你可以输出其中任意一种。
说明/提示
**样例解释 #1**
在第一个测试用例中,修改后的矩阵如下所示。
$$
\begin{bmatrix}
3 & 2 & 1 & 1 \\
1 & 1 & 3 & 4 \\
1 & 3 & 3 & 1 \\
4 & 3 & 4 & 2 \\
\end{bmatrix}
$$