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

该博客介绍了一道PKU 1830题目的解题思路,涉及如何利用高斯消元法解决灯泡状态变化的问题。通过将问题转化为异或方程,博主展示了如何运用异或的逆运算进行消元,并给出了解决方案计算2的次幂的注意事项。文章附带了完整的Pascal代码实现。
8347

被折叠的 条评论
为什么被折叠?



