[PKU 1830]关灯问题(高斯消元)

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

【题目大意】:

有n个灯,给你一个初始状态、一个目标状态,然后告诉你灯之间的联系情况(一个灯状态改变会使它相邻的灯的状态改变,这种改变不传递),每个灯的状态只许改变一次,问你有多少种方案。

【题目分析】:

简单的看一看,就发现这是一个方程组。每个灯最后的状态实际上是影响它的灯改变状态情况之和mod 2。我们知道对于只有0和1的运算来说,xor运算等价于加法mod 2,所以这就转化成了一个xor方程问题。

一见到方程,我们马上就想到了高斯消元。但是这个异或方程要怎么搞呢~~

在正常的方程我们在消元的过程中用的是加法的逆运算减法,所以我们很自然的想到xor的逆运算可以用来消元。而恰巧xor的逆运算就是他自己,这样就很方便了。

无解就是无解,否则我们看消元结束后少了几个方程,少了几个就说明有几个是不确定的。所以方案数就是2^x了~~

计算2的次幂的时候,我一直用的是<<,但是后来发现有时候会悲剧,所以还是老实的用shl吧……唉……最开始wa居然是因为这个,真悲剧……

【代码】:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值