CF1868A Fill in the Matrix
题目描述
有一个大小为 $n\times m$ 的空矩阵 $M$。
中考结束后,Daniel 想玩一些益智游戏。他打算用长度为 $m$ 的排列来填充矩阵 $M$。也就是说,$M$ 的每一行都必须是一个长度为 $m$ 的排列$^\dagger$。
定义 $M$ 的第 $i$ 列的值为 $v_i = \operatorname{MEX}(M_{1,i}, M_{2,i}, \ldots, M_{n,i})^\ddagger$。由于 Daniel 喜欢多样性,$M$ 的美丽值定义为 $s = \operatorname{MEX}(v_1, v_2, \cdots, v_m)$。
你需要帮助 Daniel 填充矩阵 $M$,使其美丽值最大。
$^\dagger$ 长度为 $m$ 的排列是一个包含 $0$ 到 $m-1$ 的 $m$ 个不同整数的数组,顺序任意。例如,$[1,2,0,4,3]$ 是一个排列,但 $[0,1,1]$ 不是排列($1$ 在数组中出现了两次),$[0,1,3]$ 也不是排列($m-1=2$,但数组中出现了 $3$)。
$^\ddagger$ 一个数组的 $\operatorname{MEX}$ 是不属于该数组的最小非负整数。例如,$\operatorname{MEX}(2,2,1)=0$,因为 $0$ 不在数组中;$\operatorname{MEX}(0,3,1,2)=4$,因为 $0$、$1$、$2$ 和 $3$ 都在数组中,但 $4$ 不在。
输入格式
输入的第一行包含一个整数 $t$($1\le t\le 1000$),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的一行包含两个整数 $n$ 和 $m$($1\le n,m\le 2\cdot 10^5$),表示矩阵的大小。
保证所有测试用例中 $n\cdot m$ 的总和不超过 $2\cdot 10^5$。
输出格式
对于每个测试用例,第一行输出一个整数,表示 $M$ 的最大美丽值。
然后输出一个 $n\times m$ 的矩阵 $M$,即你构造的矩阵。
如果有多种方案,输出任意一种均可。
说明/提示
在第一个测试用例中:
- $v_1 = \operatorname{MEX}(1,0,1,0) = 2$;
- $v_2 = \operatorname{MEX}(0,2,0,2) = 1$;
- $v_3 = \operatorname{MEX}(2,1,2,1) = 0$。
因此,$s = \operatorname{MEX}(2,1,0) = 3$。
可以证明 $3$ 是 $M$ 的最大美丽值。
在第二个测试用例中,任意一个排列都会使 $s=2$。
在第三个测试用例中:
- $v_1 = \operatorname{MEX}(3,5,1,4,4,2) = 0$;
- $v_2 = \operatorname{MEX}(0,2,3,1,2,4) = 5$;
- $v_3 = \operatorname{MEX}(1,1,2,3,5,0) = 4$;
- $v_4 = \operatorname{MEX}(4,0,4,2,3,5) = 1$;
- $v_5 = \operatorname{MEX}(2,4,5,5,0,1) = 3$;
- $v_6 = \operatorname{MEX}(5,3,0,0,1,3) = 2$。
因此,$s = \operatorname{MEX}(0,5,4,1,3,2) = 6$。
由 ChatGPT 4.1 翻译