【发布时间】:2019-06-26 17:26:35
【问题描述】:
我正在做一个编码问题,我以某种方式通过了所有测试用例,但我不明白到底发生了什么。问题是经典 nim 游戏的一个小转折:
有两个玩家A和B。有N堆各种石头。如果堆小于K,每个玩家可以拿任意数量的石头,否则他们必须拿K的倍数。最后拿石头的人获胜。
蟒蛇
# solution -> will A win the game of piles, k?
def solution(piles, k):
gn = 0 # Grundy number
for pile in piles:
if pile % 2 != 0:
gn ^= pile + 1
else:
gn ^= pile - 1
return gn != 0
我不确定是否有足够的测试用例,但这里甚至没有使用k。老实说,我什至很难理解gn(Grundy 号码)的真正含义。我意识到如果所有堆的异或不为零,则可以证明赢得 Nim 游戏,但我真的不明白为什么这种变化需要检查堆的奇偶性。
【问题讨论】:
-
如果您在浏览器中搜索“Nim Grundy number”,您会找到比我们在此处管理的更能解释这一点的参考资料。
-
@Prune 当然可以。我仍然想了解为什么
k不会影响解决方案。 -
我主要编辑了这个问题,所以我可以删除我的反对票。我的直觉是,由于您引用的原因,给定的解决方案是不够的。当所有堆的石头少于
k时,游戏会减少到常规 Nim,但之前的情况应该考虑k。我将不得不咨询我的 Grundy-Conway 负责人...
标签: python bit-manipulation combinatorics game-theory