← 2022 · 商汤 笔试

推荐答案 测试一下

有三对丘乓球,每堆分别有4个,5个,6个,你和小明轮流去拿乒乓球,每次只能在同堆中取1-3个球,最后一次拿球的人失败。你先取,请给出一种必胜策略,并证明。(25分)

问答题 中等 经典问答问答题

参考答案

我们分析题目:这是一个组合博弈问题。有三堆石子,每堆分别有4,5,6个,每次可以从一堆中取1-3个,取走最后一个的人输(即拿到最后一个球的人失败)。这是标准的Nim变体,但取法有上下限(1-3),且是输的条件(misère Nim)。但这里堆数较少,可以手动计算SG函数或直接分析。 首先理解规则:每次只能从同一堆中取1-3个,最后拿球的人失败。注意:如果只剩一个球,你取走它就输了?不,如果你取走最后一个球,你就失败了;所以你要避免取走最后一个。但最后一个球被取走时,该次操作的人输。所以是“normal play”的相反:谁取最后一个谁输,即misère Nim。 但misère Nim有经典结论:当所有堆的大小都<=1时,策略不同;否则与normal Nim相同。这里堆大小有4,5,6,都大于1,所以misère Nim的必胜策略与normal Nim相同?需要验证。在normal Nim中,取法为1-3个,而不是任意个,所以是有限取法的Nim,但每堆是独立的,可以计算每个堆的Grundy数。由于每次取1-3个,相当于一堆石子的取石子游戏(取1-3个,最后取完的人输?注意这里规则是取最后一个输,所以对于单堆,Grundy数计算要调整。通常对于取石子游戏,定义可选项是取走1-3个,然后剩下的堆进入新状态。但胜负判定是最后取走石子的人输,所以这是反常游戏(misère)。但我们可以通过转换:如果只考虑一堆,可以计算其misère Grundy数,或者直接分析。 更简单的方法:本题是三堆,且先手先取。我们可以枚举所有状态,或利用对称策略。由于数字不大,可以手算。但需要给出必胜策略和证明。 另一种思路:这是“取石子游戏”的变种,类似“三堆石子,每次从一堆取1-3个,取最后一个输”。我们可以考虑平衡状态(P-position)。在正常Nim中,P-position是异或和为0。但对于misère Nim,当所有堆都<=1时,P-position是异或和为1?通常misère Nim的规则是:如果所有堆的大小都为1,则胜败由奇偶决定;否则与normal Nim相同。但这里每堆大小是4,5,6,都大于1,所以正常Nim的平衡状态(异或和为0)也是misère Nim的P-position。但注意,这里的每次取1-3个,不是任意取,所以不能直接用异或和,因为Grundy数不是堆的大小本身。需要计算每个堆的Grundy数(对于规则:一堆石子,每次取1-3个,取走最后一个的人输)。这实际上是misère的减法游戏。但通常对于这种有限取法的游戏,我们可以先计算出每个堆的SG值(在normal规则下,即取走最后一个赢),然后对于misère,需要转换。但这里可能更容易直接分析。 另一种方法:将问题转化为“取最后一个赢”的博弈,然后修改规则。常见技巧:如果游戏是“取最后一个输”,可以转化为“取最后一个赢”的游戏,但需要调整。例如,考虑将每个石子看做独立对象?或者通过策略配对。 实际上,有一个经典结论:对于取石子游戏,如果每次可以取1到m个(m>=1),并且是“取走最后一个输”,那么当石子数mod (m+1) = 1时是P-position,否则是N-position。但这只适用于一堆的情况。对于多堆,则需要考虑各堆的模数。但这不是简单的异或,因为各堆之间相互影响。可以这样:每个堆的“安全状态”是模(m+1)后余1?比如m=3,则一堆石子,如果石子数 mod 4 = 1,那么先手必输(因为每次可以取1-3个,最后取输)。验证:1个石子,先手只能取1,输,所以P。5个石子:5 mod 4 =1,先手输?试试:先手取1,剩4,后手可以取3,剩1,先手取1输。或者先手取2,剩3,后手取3,输?不对,后手取3后剩0,后手取走了最后一个,后手输?注意规则:取最后一个输,所以如果后手取走3,剩下0,后手是取了最后一个吗?实际上,当后手取走3后,所有石子被取完,后手是最后一次拿球的人,所以后手输。所以先手赢。因此5 mod 4 =1并非必输。重新分析:一堆石子,取1-3个,取最后一个输。设f(n)是胜负。f(0)?游戏结束?实际上,如果没石子了,上一个取完的人输了,所以0是上一个玩家的输,即当前玩家胜?通常定义:无法进行合法操作的一方输。这里如果没石子了,当前玩家无法取,所以当前玩家输?不对,游戏开始时有石子。我们定义状态:石子数为n,当前玩家要取,如果n=0,则当前玩家无法取,所以当前玩家输。但游戏过程中,当有人取完最后石子时,他就输了?实际上规则是“最后一次拿球的人失败”,所以取完最后一个石子的人立即输,游戏结束,另一方获胜。所以当n=0时,游戏已经结束,不会出现当前玩家面临0的情况。所以n>0。那么对于单堆,n=1:只能取1,取完,取的人输,所以先手输。n=2:先手可以取1或2。若取2,则取完,先手输,不好;若取1,剩1,后手只能取1,后手输,所以先手赢。n=3:先手取3则输;取2,剩1,后手输;取1,剩2,后手可以取1(剩1,然后先手取1输)或取2(输),所以后手最优是取1,导致先手面临1,先手输。所以n=3时先手赢(取2)。n=4:先手取1剩3,后手面对3是胜态(后手

涉及知识点

  • IC 基础
  • 数字电路
  • 设计与验证
← 上一题
登录后反馈错题
下一题 →