#P16440. pm8018偶数灯阵

pm8018偶数灯阵

题目背景

城市科技馆准备在周末举办一场灯光互动展。工程师林澈和学生志愿者小悠负责调试一面由若干盏灯组成的矩形灯墙,其中每盏灯只有“熄灭”和“点亮”两种状态。

为了让各条供电线路的负载保持稳定,正式开放前必须保证:每一横排中点亮的灯数为偶数,并且每一竖列中点亮的灯数也为偶数。

控制台不能单独切换某一盏灯,只能一次反转完整的一行或一列。林澈希望用尽可能少的操作完成调试,以免耽误当晚的设备联调。

题目描述

给定一个有奇数行、奇数列的 0101 矩阵。矩阵中的 0 表示灯熄灭,1 表示灯点亮。

一次操作可以选择矩阵中的任意一行或任意一列,并将其中所有元素反转:

  • 0 变为 1
  • 1 变为 0

你需要使矩阵的每一行和每一列都恰好包含偶数个 1

求完成目标所需的最少操作次数。如果无法完成,输出 -1

输入格式

第一行输入两个整数 n,mn,m,分别表示矩阵的行数和列数。

接下来 nn 行,每行输入一个长度为 mm 的字符串,仅由字符 01 组成,描述矩阵的一行。

输出格式

输出一个整数,表示使每一行和每一列中的 1 的数量均为偶数所需的最少操作次数。

如果无法完成,输出 -1

样例 1

输入

3 3
111
011
001

输出

2

说明

可以先反转中间一行,再反转中间一列,共进行 22 次操作。

样例 2

输入

5 3
111
111
111
111
111

输出

3

说明

可以反转全部三列。另一种方案是反转全部五行,因此最少需要 33 次操作。

样例 3

输入

3 5
00000
00000
00000

输出

0

说明

初始时每一行和每一列都已经包含偶数个 1,无需进行操作。

样例 4

输入

5 5
10101
01010
10101
01010
10101

输出

5

数据范围

  • 1n,m491\le n,m\le 49
  • nnmm 均为奇数;
  • 每个矩阵元素均为 01