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 翻译