CF1570F 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$ 的每个对应元素都相等时,才认为两个矩阵相同。 请判断是否有可能通过若干次操作使得 $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 翻译