0%

The 6th Liaoning Provincial Collegiate Programming Contest-2025-辽宁省赛-L. Leak

题目大意

题目描述

给定一个正整数 nn 以及两个长度为 nn 的排列 rrcc
请构造一个 n×nn \times n 的矩阵,满足以下所有条件:

  1. 矩阵中的所有元素均为 [0,n][0, n] 范围内的整数。

  2. 矩阵第 ii 行元素的 MEX\text{MEX} 值为 rir_i

  3. 矩阵第 ii 列元素的 MEX\text{MEX} 值为 cic_i

注:数组的 MEX\text{MEX} 值是指数组中未出现的最小非负整数。题目保证必然存在符合上述条件的矩阵。

输入格式

第一行包含一个整数 TT1T1031 \le T \le 10^3),表示测试用例的数量。
对于每个测试用例:
第一行包含一个正整数 nn1n2×1031 \le n \le 2 \times 10^3)。
第二行包含一个长度为 nn 的排列 r1,r2,,rnr_1, r_2, \dots, r_n
第三行包含一个长度为 nn 的排列 c1,c2,,cnc_1, c_2, \dots, c_n
保证所有测试用例中 nn 的总和不超过 2×1032 \times 10^3

输出格式

对于每个测试用例,输出 nn 行,每行包含 nn 个整数,表示满足所有条件的矩阵。如果有多个符合条件的矩阵,输出其中任意一个即可。

样例数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
输入:
2
4
2 1 3 4
3 4 1 2
5
2 1 4 3 5
1 4 2 5 3

输出:
0 0 4 1
2 3 4 0
1 2 0 1
0 1 2 3
0 0 0 0 1
0 0 0 2 0
2 3 3 1 0
2 1 0 4 2
0 2 1 3 4

样例解释

以第一个测试用例为例,n=4n = 4r=[2,1,3,4]r = [2, 1, 3, 4]c=[3,4,1,2]c = [3, 4, 1, 2]
对于输出的矩阵:

  • 11 行元素为 [0,0,4,1][0, 0, 4, 1],其中包含 0,1,40, 1, 4,未出现的最小非负整数为 22,等于 r1r_1

  • 22 行元素为 [2,3,4,0][2, 3, 4, 0],其中包含 0,2,3,40, 2, 3, 4,未出现的最小非负整数为 11,等于 r2r_2

  • 33 行元素为 [1,2,0,1][1, 2, 0, 1],其中包含 0,1,20, 1, 2,未出现的最小非负整数为 33,等于 r3r_3

  • 44 行元素为 [0,1,2,3][0, 1, 2, 3],其中包含 0,1,2,30, 1, 2, 3,未出现的最小非负整数为 44,等于 r4r_4

同理观察列方向上的 MEX\text{MEX} 值:

  • 11 列元素为 [0,2,1,0][0, 2, 1, 0],包含 0,1,20, 1, 2,其 MEX\text{MEX} 值为 33,等于 c1c_1

  • 22 列元素为 [0,3,2,1][0, 3, 2, 1],包含 0,1,2,30, 1, 2, 3,其 MEX\text{MEX} 值为 44,等于 c2c_2

  • 33 列元素为 [4,4,0,2][4, 4, 0, 2],包含 0,2,40, 2, 4,其 MEX\text{MEX} 值为 11,等于 c3c_3

  • 44 列元素为 [1,0,1,3][1, 0, 1, 3],包含 0,1,30, 1, 3,其 MEX\text{MEX} 值为 22,等于 c4c_4

所有行和列的 MEX\text{MEX} 值均完全符合输入的排列要求,该矩阵合法。

思路讲解

不难注意到这样一个构造方法。

image

然后,其实我们自己也想到了,一个构造方法,可以通过行列交换,得到新的,任何符合要求的这个 mex 矩阵。

通过行交换,可以使得列的条件依然得到满足。通过列交换,可以使得行的条件依然得到满足

因此,现应用行交换,再应用列交换,就可以把一个这个构造方法变成任何东西。

1
2
3
4
5
6
7
8
for (int i_R=1;i_R<=N;++i_R) {
ll i=R[i_R];
for (int j_C=1;j_C<=N;++j_C) {
ll j=C[j_C];
cout<<maze[i][j]<<" ";
}
cout<<"\n";
}

AC代码

AC
https://codeforces.com/gym/106380/submission/366322358

心路历程(WA,TLE,MLE……)