题解 ARC140E【Not Equal Rectangle】

萌萌构造题,随便构造构造就做出来了。似乎跟官方题解思路一样。

首先解决以下问题:给定一个质数 \(P\),构造一个每个数在 \(0\sim P-1\) 的大小为 \(P^2\times P^2\) 的矩阵,满足不存在 \(x_1\ne x_2,y_1\ne y_2\) 使得 \(a_{x_1,y_1}=a_{x_1,y_2}=a_{x_2,y_1}=a_{x_2,y_2}\)

类似 \(9\times 9\) 的数独那样,我们将所求矩阵划分为 \(P^2\) 个大小为 \(P\times P\) 的宫。如果一个宫 \(M\) 满足 \(M_{i,j}=(i+j+k)\bmod P\),就称其为 \(k\) 类宫,记作 \(B_k\)

例如,\(P=3\) 时:

\[B_0= \begin{bmatrix} 0 & 1 & 2 \\ 1 & 2 & 0 \\ 2 & 0 & 1 \\ \end{bmatrix}, B_1= \begin{bmatrix} 1 & 2 & 0 \\ 2 & 0 & 1 \\ 0 & 1 & 2 \\ \end{bmatrix}, B_2= \begin{bmatrix} 2 & 0 & 1 \\ 0 & 1 & 2 \\ 1 & 2 & 0 \\ \end{bmatrix} \]

对于所求矩阵的第 \(i\) 行第 \(j\) 列的宫,令其为 \(B_{ij\bmod P}\) 即可。

例如,\(P=3\) 时:

\[A= \begin{bmatrix} B_0 & B_0 & B_0 \\ B_0 & B_1 & B_2 \\ B_0 & B_2 & B_1 \\ \end{bmatrix} = \begin{bmatrix} 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 \\ 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 \\ 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 \\ 0 & 1 & 2 & 1 & 2 & 0 & 2 & 0 & 1 \\ 1 & 2 & 0 & 2 & 0 & 1 & 0 & 1 & 2 \\ 2 & 0 & 1 & 0 & 1 & 2 & 1 & 2 & 0 \\ 0 & 1 & 2 & 2 & 0 & 1 & 1 & 2 & 0 \\ 1 & 2 & 0 & 0 & 1 & 2 & 2 & 0 & 1 \\ 2 & 0 & 1 & 1 & 2 & 0 & 0 & 1 & 2 \\ \end{bmatrix} \]

证明采用反证法:假设存在相等的四个数位于两行、两列的交点,显然必须在四个不同的宫,设左上、右上、左下、右下对应的宫分别是 \(a,b,c,d\) 类宫,则有 \(a-b=c-d\),但是这不可能发生。

解决了上面的问题,原问题便迎刃而解了。

代码:

const int P = 23;
cin >> n >> m;
for(int i = 0; i < n; ++i) {
    for(int j = 0; j < m; ++j) {
        int val = ((i / P) * (j / P) + i + j) % P + 1;
        cout << val << " \n"[j == m - 1];
    }
}
posted @ 2024-01-13 09:45  rui_er  阅读(10)  评论(0编辑  收藏  举报