CF1391D(思维)

CF1391D(思维)

打 cf 打到了这道题,想了会做出来了,感觉这题挺有趣的

题目大意

给出一个 0/1 矩阵,要求所有长度为偶数的子正方形内部的异或和为 1,可以把 0 变 1 或把 1 变 0,求是否可以满足要求,如果可以求最少要变化几次

数据范围

\(1 \le n \times m \le 10^6,n \le m\)

解题思路

容易发现当 \(n \ge 4\) 的时候没有解,因为它包含了四个小偶数正方形

\(n = 1\) 时什么都不用改

\(n = 2\) 时发现要满足的要求等价于奇数列的上下两个值的异或和都相等,偶数列同理,且奇偶列的异或和为 1,考虑相邻的两个 \(2 \times 2\) 矩形异或起来剩周围的两个竖条,他们的异或和为 0,所以各自的异或和相等

\(n = 3\) 考虑和 \(n=2\) 时一样做,我们把它拆成两个 \(n = 2\) 时的情况即可,正确性留给读者思考

总复杂度 \(\Theta(nm)\),目前是最快的之一,代码不是很好懂就不放了

posted @ 2020-08-10 22:32  Hs-black  阅读(161)  评论(0编辑  收藏  举报