难得的中文题。
其实是很简单的解xor方程,只是,大牛小牛们似乎都认为太简单了,所以相关的资料写的都很简单,结果一开始看不懂........
所以就写的详细些吧。
我们知道,一些开关与另一些开关相关联,比如x 和y 相关,那么,我们可以这样认为,按了x,就同时按了y,于是,
对于每个y开关,它按的次数等于 与他相关的开关直接按了的次数+它自己按了的个数。
举个例子,假如 1 和2 相关,3 和2 相关,4 和2 相关
那么,2被直接和间接按了几次呢? 明显,应该是1,3,4 这三个开关直接按了的次数,加上 是否按2 本身这一次。如果1,3 直接按了,2也直接按了,那么实际上2被按了3 次。
那么,如果一个开关它被间接按的个数为奇数,那么它的状态改变,否则不改变。这个就可以用xor 表示了。
如果a2,a4和a1 有关联,那么列方程 a1 xor a2 {xor 0*a3} xor a4 = x(如果a1的开关最终需要改变,x为1,否则为 0)
这样列出n个方程,高斯消元即可。
最后2^自由元个数就是答案,这些东西.......就比较好做了,apio2011mt 讲的很多了。
{小小的注释一下,当使用高斯消元后,会出现一个上三角,查看上三角的斜边,系数为0的个数就是自由元的个数——因为系数为0,那么他它取0或1 ,对式子都毫无影响,所以是个自由元,然后,自由元之间相互独立,根据乘法原理可以得出答案}
而如果高斯消元后出现系数都为0 而方程右边却是1——0*a1+0*a2+....+0*ax=1 这个方程肯定是无解的.........
所以这道题就ok了。