数学题

有个*长想释放两个犯人
他找来一个 8 × 8 8\times 8 8×8 的棋盘,每个格子放有一个硬币,正反随机
在 64 64 64 个格子中的一个格子下面藏有钥匙,找到钥匙犯人就可以出狱
现在*长告诉了第一个犯人钥匙的位置,但是第一个犯人不能去拿
它只能(且必须)将一枚硬币翻转,然后第二个犯人要找到钥匙,出狱
问:怎么才能出狱?

解:
刚看到题的时候我很懵,我想不管第一个犯人如何操作
第二个犯人看到的都是一个随机的棋盘,这怎么可能?

让我们先从信息的角度理性审视一下这个问题

棋盘有 2 64 2^{64} 264 种状态,第一个犯人要传 64 64 64 种不同的信息
我们可以让 2 58 2^{58} 258 个状态对应一个信息
抽象成有 2 64 2^{64} 264 个点,我们将其分到 64 64 64 个集合,每个集合有 2 58 2^{58} 258 个点
第二个犯人只需要检查他看到的状态在哪个集合就可以知道钥匙的位置
现在的问题是:给出任意一个状态,第一个犯人都可以操作到他想要的状态
将可以互相变换的两个点连边
现在每个点连出去 64 64 64 条边,这 64 64 64 条边必须对应到不同的 64 64 64 个集合
所以,在合理的构造下,犯人是可以出狱的

下面给出我的构造:
首先注意到一个性质:
这个图是二分图,这一点是比较显然的:将点的标号看成二进制数,有奇数个 1 1 1 的在一个集合,有偶数个 1 1 1 的在一个集合,显然集合内没有边,只有集合间有边,大概长成这个样子:
数学题

接着我们再对原问题(每个点连出去 64 64 64 条边,这 64 64 64 条边必须对应到不同的 64 64 64 个集合)做出一个转换:
即每个集合的导出子图不存在大小 ≥ 3 \ge 3 ≥3 的联通块,且每个点属于一个二元环
数学题
怎么办呢?我们先对二分图找到一个完美匹配,这个完美匹配是十分优美的:
即 ( 0 , 1 ) , ( 2 , 3 ) , ( 4 , 5 ) … (0,1),(2,3),(4,5)\dots (0,1),(2,3),(4,5)…
那么问题变成了:有 2 63 2^{63} 263 个点对,要分到 64 64 64 个集合,使得每个集合是独立集
这看起来很困难,其实限制是十分松的:
因为这 2 63 2^{63} 263 个点对组成的图也是一个二分图
证明:将 ( 0 , 1 ) , ( 2 , 3 ) , ( 4 , 5 ) … (0,1),(2,3),(4,5)\dots (0,1),(2,3),(4,5)… 分别标成 0 , 1 , 2 … 0,1,2\dots 0,1,2… 号点
那么之前 16 16 16 个点的二分图会变成下面 8 8 8 个点的二分图
(它们性质是相同的,因为第二种只是没有考虑最低位)
数学题
那么我们轻轻松松就可以将其划分成 64 64 64 个独立集

最后给出 2 × 2 2\times 2 2×2 的构造:
分成 4 4 4 个集合,分别为 ( 0 , 1 , 6 , 7 ) , ( 2 , 3 , 4 , 5 ) , ( 10 , 11 , 12 , 13 ) , ( 8 , 9 , 14 , 15 ) (0,1,6,7),(2,3,4,5),(10,11,12,13),(8,9,14,15) (0,1,6,7),(2,3,4,5),(10,11,12,13),(8,9,14,15)

上一篇:剑指 Offer 58 - I. 翻转单词顺序


下一篇:58到家MySQL军规升级版(转)