CF1207B Square Filling
题目描述
给定两个矩阵 $A$ 和 $B$,每个矩阵恰好包含 $n$ 行 $m$ 列。矩阵 $A$ 的每个元素要么为 $0$,要么为 $1$;矩阵 $B$ 的每个元素初始均为 $0$。
你可以对矩阵 $B$ 进行若干次操作。每次操作时,你可以选择 $B$ 中任意一个 $2 \times 2$ 的子矩阵,并将该子矩阵内的所有元素都替换为 $1$。也就是说,你选择两个整数 $x$ 和 $y$,满足 $1 \le x < n$ 且 $1 \le y < m$,然后将 $B_{x, y}$、$B_{x, y + 1}$、$B_{x + 1, y}$ 和 $B_{x + 1, y + 1}$ 都赋值为 $1$。
你的目标是使矩阵 $B$ 等于矩阵 $A$。当且仅当矩阵 $A$ 的每个元素都等于矩阵 $B$ 中对应位置的元素时,称 $A$ 和 $B$ 相等。
请判断是否有可能通过上述操作使得 $B$ 等于 $A$。如果可以,请给出一组操作序列,使得 $B$ 变为 $A$。注意,你不需要使操作次数最小。
输入格式
第一行包含两个整数 $n$ 和 $m$,满足 $2 \le n, m \le 50$。
接下来 $n$ 行,每行包含 $m$ 个整数。第 $i$ 行第 $j$ 个整数为 $A_{i, j}$,每个整数为 $0$ 或 $1$。
输出格式
如果无法通过操作使 $B$ 等于 $A$,输出一个整数 $-1$。
否则,输出任意一组将 $B$ 变为 $A$ 的操作序列。第一行输出一个整数 $k$,表示操作次数,接下来 $k$ 行,每行输出两个整数 $x$ 和 $y$,表示一次操作(将 $B_{x, y}$、$B_{x, y + 1}$、$B_{x + 1, y}$ 和 $B_{x + 1, y + 1}$ 赋值为 $1$)。要求 $0 \le k \le 2500$。
说明/提示
第一个样例的操作序列如下:
$$
\begin{matrix}
0 & 0 & 0 & & 1 & 1 & 0 & & 1 & 1 & 1 & & 1 & 1 & 1 \\
0 & 0 & 0 & \rightarrow & 1 & 1 & 0 & \rightarrow & 1 & 1 & 1 & \rightarrow & 1 & 1 & 1 \\
0 & 0 & 0 & & 0 & 0 & 0 & & 0 & 0 & 0 & & 0 & 1 & 1
\end{matrix}
$$
由 ChatGPT 4.1 翻译