CF1983B Corner Twist
题目描述
给定两个 $n$ 行 $m$ 列的数字网格 $a$ 和 $b$,网格中的所有值均为 $0$、$1$ 或 $2$。
你可以对 $a$ 进行如下操作任意次:
- 任意选择一个长和宽均不少于 $2$ 的子矩形。你可以选择整个网格作为子矩形。
- 该子矩形有四个角。任选一对对角线上的角,将它们的值加 $1$(对 $3$ 取模)。
- 对于未被选中的另外一对角,将它们的值加 $2$(对 $3$ 取模)。
注意,该操作只会改变所选子矩形的四个角的值。
请判断是否可以通过若干次(可以为零次)上述操作,将网格 $a$ 变换成网格 $b$。
输入格式
第一行包含一个整数 $t$,表示测试用例的数量($1 \le t \le 250$)。
对于每个测试用例:
第一行包含两个整数 $n$ 和 $m$,表示网格的行数和列数($2 \le n, m \le 500$)。
接下来 $n$ 行,每行 $m$ 个字符,表示 $a$ 网格的每个元素。
再接下来 $n$ 行,每行 $m$ 个字符,表示 $b$ 网格的每个元素($0 \le a_{i,j}, b_{i,j} \le 2$)。
保证所有测试用例中 $n$ 的总和与 $m$ 的总和不超过 $500$。
输出格式
对于每个测试用例,如果可以将网格 $a$ 变换为网格 $b$,输出 "YES"(不含引号),否则输出 "NO"(不含引号)。
输出不区分大小写。例如,"yEs"、"yes"、"Yes" 和 "YES" 都会被识别为肯定回答。
说明/提示
在第一个测试用例中,可以按如下方式将网格 $a$ 变换为 $b$:
$$
\begin{matrix}
\fbox{0} & 0 & \fbox{0}\\
0 & 0 & 0\\
\fbox{0} & 0 & \fbox{0}
\end{matrix}
\Rightarrow
\begin{matrix}
1 & 0 & 2\\
0 & \fbox{0} & \fbox{0}\\
2 & \fbox{0} & \fbox{1}
\end{matrix}
\Rightarrow
\begin{matrix}
1 & 0 & 2\\
\fbox{0} & \fbox{1} & 2\\
\fbox{2} & \fbox{2} & 2
\end{matrix}
\Rightarrow
\begin{matrix}
1 & \fbox{0} & \fbox{2}\\
1 & 0 & 2\\
1 & \fbox{0} & \fbox{2}
\end{matrix}
\Rightarrow
\begin{matrix}
1 & 1 & 1\\
1 & \fbox{0} & \fbox{2}\\
1 & \fbox{2} & \fbox{0}
\end{matrix}
\Rightarrow
\begin{matrix}
1 & 1 & 1\\
1 & 1 & 1\\
1 & 1 & 1
\end{matrix}
$$
在每一步操作中,被方框标记的右上和左下角加 $2$(对 $3$ 取模),左上和右下角加 $1$(对 $3$ 取模)。
在第四个测试用例中,可以证明无法通过上述操作将 $a$ 变换为 $b$。
由 ChatGPT 4.1 翻译