xor 方程 poj 1830

难得的中文题。

 

其实是很简单的解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了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值