CF1157G Inverse of Rows and Columns

题目描述

给定一个大小为 $n \times m$ 的二进制矩阵 $a$。二进制矩阵是指每个元素都是 $0$ 或 $1$ 的矩阵。 你可以对该矩阵进行若干次(也可以不进行)如下操作:每次操作可以反转矩阵的一行或一列。具体来说,反转一行就是将该行的所有值取反($0$ 变为 $1$,$1$ 变为 $0$);反转一列同理。 你的任务是通过某种操作序列将初始矩阵变为有序矩阵。矩阵被认为是有序的,当数组 $[a_{1, 1}, a_{1, 2}, \dots, a_{1, m}, a_{2, 1}, a_{2, 2}, \dots, a_{2, m}, \dots, a_{n, m - 1}, a_{n, m}]$ 按非递减顺序排列时,即视为有序。

输入格式

输入的第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le 200$),分别表示矩阵的行数和列数。 接下来的 $n$ 行,每行包含 $m$ 个整数。第 $i$ 行第 $j$ 个元素为 $a_{i, j}$($0 \le a_{i, j} \le 1$),表示矩阵 $a$ 在位置 $(i, j)$ 的元素。

输出格式

如果无法将矩阵变为有序,第一行输出 "NO"。 否则,第一行输出 "YES"。第二行输出一个长度为 $n$ 的字符串 $r$,第 $i$ 个字符 $r_i$ 为 '1' 表示第 $i$ 行被反转,为 '0' 表示未被反转。第三行输出一个长度为 $m$ 的字符串 $c$,第 $j$ 个字符 $c_j$ 为 '1' 表示第 $j$ 列被反转,为 '0' 表示未被反转。如果有多种答案,可以输出任意一种。

说明/提示

由 ChatGPT 4.1 翻译