CF1977D XORificator
题目描述
给定一个仅包含 $0$ 和 $1$ 的 $n \times m$ 二进制矩阵。你还拥有一个“异或器”,可以用它对选定的某一行进行翻转(即将该行的 $0$ 变为 $1$,$1$ 变为 $0$)。
如果某一列恰好包含一个 $1$,则称该列为“特殊列”。你的任务是,找出最多能同时让多少列成为特殊列,并给出应对哪些行使用异或器的方案。
输入格式
每个测试点包含多个测试用例。输入的第一行为一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行为两个整数 $n$ 和 $m$($1 \leq n, m \leq 3 \times 10^5$,$n \cdot m \leq 3 \times 10^5$)。
接下来的 $n$ 行,每行包含一个长度为 $m$ 的二进制字符串,表示矩阵的一行。
保证所有测试用例中 $n \cdot m$ 的总和不超过 $3 \times 10^5$。
输出格式
对于每个测试用例,输出两行。
第一行输出最多能同时成为特殊列的列数。
第二行输出一个长度为 $n$ 的二进制字符串,第 $i$ 个字符为 $0$ 表示不对第 $i$ 行使用异或器,为 $1$ 表示对第 $i$ 行使用异或器。
如果存在多种异或器使用方案都能达到最优答案,可以输出任意一种。
说明/提示
在第一个测试用例中,可以对第二行使用异或器,使得第 $2$、$3$、$4$ 列成为特殊列。
在第二个测试用例中,唯一的列已经是特殊列,因此无需使用异或器。
由 ChatGPT 4.1 翻译