最强皇女输入1按照“4道题,每道题0/1两个选项”的规则进行。输入2的话可以自己指定题目数量(choices)和每道题的选项范围(range,0到某个数),也就是n道题,每道题有k个选项的情况。
猜测正确答案时,输入你所猜测的数字串即可。如果range超过9,那么这些数字之间用空格隔开。猜中了的话会提示:
回到问题本身,先从最简单的情况考虑吧,如果是4道判断题,每次提交以后可以获知正确的数量,最少要提交多少次能确保知道正确答案呢?
每个0都可以替换成1,如果我们把每个题选择不同的选项,看作在一个维度上的变化的话,所有可能的答案就构成了……
点的坐标不是随便标的。你会发现,任何两个相邻的点,它们都只需要沿着棱移动一次(切换一个坐标分量)就能到达对方。类似地,某个点沿着棱移动两次,一定会到达一个“与自己有两个坐标不同”的另一个答案,除非沿着相同的棱走了个来回,那它又会变成自己。
我们定义“某个点需要沿着棱移动至少多少次,才能到达另一个点”为这两个点之间的“距离”。于是,0000到1000的距离为1,到1100或者0110的距离为2,到1011或者0111的距离为3,到1111的距离为4。沿一条棱移动一次,就是将这个点的某一个坐标翻转(0变成1,1变成0)。
显然,4个坐标都翻转只可能有一种情况。不妨将与某个点G距离为4的点称为这个点的“对称点”G。
定理2:任选一个点G与另一个点A(可以与G重合),则G到A的距离+G到A的距离=4
可以看出,翻转G的一部分坐标来到点A,再翻转剩余的坐标,就会来到它的对称点G,而两次翻转的坐标数量之和就是坐标的总数4个。
提交一次答案后可以得知正确的数量,换个说法,我们知道了这个答案中错误的数量(4-正确的数量),而此数量就是我们所提交的答案与正确答案之间的“距离”。
所有的答案都是对称的。对于这样的单位超立方体来说,它有着无与伦比的对称性。我们总有办法旋转它,让任意一个点移动到0000这个位置来。那不妨我们的猜测就从G1=0000开始,此时,正确答案可能位于16个点中的任意一个上,我们就把它叫做G0。
第一次猜测,根据错误数量,我们知道了G0与G1的距离。这个距离如果是0或者4,那游戏已经结束了,因为距离为0的点就是G1自己,说明我们已经达到了目标;而距离为4的点也只有一个,即G1的对称点G1=1111,因此无论这一次猜测正确与否,我们都知道了正确答案所在的位置。
剩下的情况,我们可能知道G0离我们还有1~3距离。接下来就要考虑,你的下一次猜测,G2,和G1的距离是多少会比较好。将G2定为G1的对称点是没有意义的,根据定理2,将G1的对称点G1选作G2,那么G2与G0的距离一定会变成4-(G0与G1的距离),丝毫不能为我们提供任何额外的信息。这就像是一组判断题,将所有的√与×翻转,正确的数量一定是原来错误的数量,毫无指导意义。
进一步,我们可能会想选择一个距离G1为3的G2,根据定理2可以知道这样选择的G2,它的对称点G2与G1的距离是1。而G2与G2到G0的距离之和为固定的4,那我们完全可以在初次选择G2时就选择这个G2,不会有任何信息损失。
所以,我们的G2应该选在与G1距离为1或者2的位置。事实上,让G2与G1距离为2是最好的,在接下来的讨论中你很快就能发现这一点。迄今为止,我们除了G1与G0的距离外还没有获得任何其他信息,因此G2的选择是相当随意的。让我们就选择1010这个点吧,也就是最靠近我们的正方形的右上角这个点。
这对应了“提交答案0000,返回正确答案数为3”的情况。你可能会想依次尝试和G1距离为1的4个点,这么做确实可以保证得到正确答案,但不是必需的。
注意,G1=0000到G2=1010有两条路径可以选,分别经过1000与0010这两个点,它们是唯二的与G1和G2距离同时为1的点。同样,从G1到G2=0101也有两条路径,分别经过0100和0001,它们也是唯二的与G1和G2距离同时为1的点。这4个点也覆盖了与G1距离为1的所有情况。据此,我们选择了G2=1010并提交答案以后,可以获知G0与G2以及G0与G2的距离,而这两个距离中必然有一个是1(另一个则是3)。如果G0和G2的距离是1,那么只需要再测试一次G3=1000,观察它和G0的距离是0(那么G0=1000)还是2(那么G0=0010)就可以得到答案。对于G0到G2的距离是3的情况,则只要将G3设为G1与G2之间的两点中的一个,也同样一定能得到答案。
这对应了“提交答案0000,返回正确答案数为1”的情况。根据定理2,G1即1111到G0的距离一定是1,而我们选择G2=1010同样满足G2到G1的距离为2,也就是化归成了上一种情况,只要将所有的G1换成G1来分析即可。
这种情况会稍微麻烦点,因为和G1、G2距离同时为2的点总共有4个,分别是1100、0110、0011和1001:
而且,这4个点相当地对称。从16个点中选择任意一个点,它到这4个点的总共4个距离中都至少有两个是相等的。好在我们选择的G3只要避开G1、G1、G2、G2,它到这4个点的距离就不会全部相等(有两个相等,另两个分别是1和3或者分别是0和4,亦或是两个1和两个3,这暗示我们至少还需要提交两次答案)。
不妨选择G3=1001,此时得到的距离G0G3可能是0(G0=1001)或者4(G0=0110),这时候我们已经得到了答案;另外也可能是2,说明G0=1100或者G0=0011,那就还需要一次提交G4=1100,根据G0G4是0还是4决定最终G0的位置。
所以,要确保知道正确答案,我们至少需要提交4次。(如果一定要提交一次正确答案才算完成的线次,这对应了上面讨论中最后G4与G0的距离仍然是4的情况)。
写完啦!虽然这可能有点文不对题(如果题目预设了选择题都有4个选项的话),不过至少针对每题只有两个选项的情况,这应该是严谨的、构造性的一个证明了吧。还附赠了一个小游戏呢,不打算点个赞么~
|