四省联考第16题, 与异或方程组 环球关注

哔哩哔哩   2023-03-11 23:16:24

总结: OI 不是白学的.

注: 下面的方法看上去很复杂, 但是如果熟练的话能做到很快. (不过大概还是比不过原神玩家.)


(相关资料图)

容易发现一个很强的性质, 就是按开关的顺序对状态没有影响.

所以我们设九个开关的状态分别为  (从上到下, 从左到右, 0 表示未按下, 1 表示按下), 方格的状态分别为 (同理).

我们考虑每个方格会如何被其周围的方格影响.

以  为例, 我们发现它会被  决定. 

具体地, 我们有 .

信息技术课学的好的同学会知道这里的  指的就是异或运算.

因为这里 , 我们可以简单理解成模 2 的加法.

也就是说上面的式子等价于这个式子:

很好理解吧.

所以我们只需要枚举  把方程组列出来, 解就完事了!

所以下面是方程组构成的增广矩阵 (已经代入了 ):

简单解释一下.

每一行表示一个方程. 前九个数表示九个未知数  的系数(实际上系数应该都是1和0, 但是那样容易写串), 最后一个数就是 .

比如第一行就表示, , 其中已知 .

列完了方程组, 考虑消元!

我们知道一般的线性方程组消元人力算起来是很费劲的. 但是这是异或方程组, 有性质:

, (容易证明).

也就是说异或两次就相当于什么都没做, 并且 0 不会造成影响.

并且因为异或是有交换律和结合律的, 我们的消元操作实际上非常简单. 只需要把两个方程异或一下, 都出现的未知数就没了.

多说无用. 直接对上面的矩阵进行消元.

首先我们消 .

我们将第二行的方程异或上第一行:

很简单吧. 注意最后一行是要算的.

如法炮制消第四行:

这样就消完一个未知数了!

当然我们也没有必要就执着于按顺序消. 我们可以通过选取恰当的消元顺序, 使消元的效果更好.

比如对于上面的方程组, 我们可以用第二行来消:

先别急. 我们会神奇的发现, 用第三行消第五行:

即得 .

或许这样几步就消出来一个未知数有点碰运气的嫌疑. 不过实际上即便没有这样的观察, 因为这里矩阵的特殊性质(band-matrix), 朴素进行消元也会有不小的概率会遇到这种情况. 即使就是暴力消, 最终的运算量也不会有多大, 在草稿纸上用铅笔橡皮不用几分钟就能消完.

回到具体计算上. 将  代入下面三个方程中 (之后不再用颜色区分正在进行消元操作的两行):

温馨提示: .

用第九行消第六行, 第六行消第二行:

此时得到 .

. 代入, 然后用第四行消第三行:

故 . 由此依次得 

整理得  (并不规范的写法),

容易验证成立.

由解的唯一性易知最少操作步数为5.

这道题就这么做完了. 因为本人之前也独立搞出过这种东西(毕竟也算是经典谜题了), 做起来还是问题不大的. 但是高考方向出这种题未免有点抽象了. 

不过作为OI选手, 必须指出的是这种东西真的就是异或方程组板子.

https://www.luogu.com.cn/problem/P2962

还有一些类似的应用.

https://www.luogu.com.cn/problem/P3164

https://www.luogu.com.cn/problem/P2447

(方法都是类似的, 不讲了)

热文榜单