【题目大意】:
有n个灯,给你一个初始状态、一个目标状态,然后告诉你灯之间的联系情况(一个灯状态改变会使它相邻的灯的状态改变,这种改变不传递),每个灯的状态只许改变一次,问你有多少种方案。
【题目分析】:
简单的看一看,就发现这是一个方程组。每个灯最后的状态实际上是影响它的灯改变状态情况之和mod 2。我们知道对于只有0和1的运算来说,xor运算等价于加法mod 2,所以这就转化成了一个xor方程问题。
一见到方程,我们马上就想到了高斯消元。但是这个异或方程要怎么搞呢~~
在正常的方程我们在消元的过程中用的是加法的逆运算减法,所以我们很自然的想到xor的逆运算可以用来消元。而恰巧xor的逆运算就是他自己,这样就很方便了。
无解就是无解,否则我们看消元结束后少了几个方程,少了几个就说明有几个是不确定的。所以方案数就是2^x了~~
计算2的次幂的时候,我一直用的是<<,但是后来发现有时候会悲剧,所以还是老实的用shl吧……唉……最开始wa居然是因为这个,真悲剧……
【代码】: