Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)

Posted sovietpower

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)相关的知识,希望对你有一定的参考价值。

题目链接


(Description)

给定一个(n imes m)(01)矩阵。求任意选出(r)行、(c)列(共(2^{n+m})种方案),使得这(r)(c)列的交的位置的(r imes c)个数的和为奇数,的方案数有多少。
(...我也不知道怎么就表述成这样了,反正挺好理解)
(n,mleq300)

(Solution)

假设已经确定了选择某些行,然后把每一行(m)个数看做一个(m)位二进制数。
如果这些行异或和为(0),那怎么选列也不行。
否则每一列异或这些行是(0)还是(1)是确定的。假设有(a)列异或后为(1)(b)列异或后为(0)(a+b=m)。我们要从(a)中选出奇数个,从(b)中随便选,那么方案数是(2^{a-1}cdot2^b=2^{m-1})(从(n)中选出奇数个数的方案数。。(C_n^1+C_n^3+C_n^5+...=frac{2^n}{2}=2^{n-1}))。
也就是不管行怎么选,只要异或和不为(0),列就有(2^{m-1})种方案。
异或和不为(0)的方案数=(2^n-)异或和为(0)的方案数。异或和为(0)的方案数可以用线性基求,是(2^{n-r})(n)是元素总数,(r)是矩阵的秩,也就是线性基中的元素个数),所以答案就是((2^n-2^{n-r})cdot2^{m-1})
这里线性基插入还是一样的,把一行看做(m)位数就好了。


以上是关于Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)的主要内容,如果未能解决你的问题,请参考以下文章

Yahoo Programming Contest 2019 F - Pass

Yahoo Programming Contest 2019 D - Ears

Atcoder Yahoo Programming Contest 2019 简要题解

Yahoo Programming Contest 2019 F - Pass

Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)

Yahoo Programming Contest 2019 D-Ears