Life Isn't a Bowl of Cherries


Life Isn't a Bowl of Cherries

Table of Contents

题目

你和朋友Amit面前有4只樱桃碗,里面分别装着\(5,6,7,8\)颗樱桃。

你们轮流行动;每次可以任选一只碗,并从中取走至少1颗樱桃。

如果你先手,并且想确保最后一颗樱桃是Amit取走的,那么你的第一步应该从哪只碗里取走几颗樱桃?

分析

这是一个经典的Nim变形题。

它和前面的普通版本正好成对出现;如果你想对照着看,可以参考Life Is a Bowl of Cherries

如果题目目标是“让对方拿到最后一颗”,那么这就是所谓的misere Nim。这里一开始4堆樱桃的数量分别是\(5,6,7,8\),并且至少有两堆的数量大于\(1\),所以在这种局面下,最优策略和普通Nim完全一样:先把4堆的异或和调成\(0\)

原因是:misere Nim和普通Nim的唯一区别,只出现在残局“所有非空堆都只剩\(1\)颗”时。因为到了那个阶段,玩家已经不能再通过“多拿几颗”改变局面的结构,只能每次消去一个\(1\)

而在此之前,只要还存在某一堆大于\(1\),局面就和普通Nim一样,仍然可以用“把异或和调成\(0\)”这一标准策略来控制节奏,把对手反复送回到必败型局面。

把4个数写成二进制:

  • \(5=0101\)
  • \(6=0110\)
  • \(7=0111\)
  • \(8=1000\)

它们的异或和是\(5\oplus6\oplus7\oplus8=12\)

因此先手应当把某一堆改成“原数异或\(12\)”之后得到的更小值。逐个检查:

  • \(5\oplus12=9\),比\(5\)大,不能这样改;
  • \(6\oplus12=10\),比\(6\)大,不能这样改;
  • \(7\oplus12=11\),比\(7\)大,不能这样改;
  • \(8\oplus12=4\),比\(8\)小,可以把这一堆从\(8\)改成\(4\)

所以你的第一步应当是:从装有8颗樱桃的碗里拿走4颗。

这样局面就变成\(5,6,7,4\),而\(5\oplus6\oplus7\oplus4=0\)

不过,这里有一个关键细节:不能把“始终把异或和调成\(0\)”这件事机械地执行到最后。

正确的做法是:在还有至少两堆樱桃数大于\(1\)时,策略和普通Nim完全一样,也就是每次都把局面重新调成异或和\(0\)。这样反复进行,局面最终会进入这样一种残局:只剩一只碗里多于\(1\)颗樱桃,其余每个非空碗里都恰好只剩\(1\)颗。

设这时除了那只“较大的碗”之外,另外还有\(m\)只碗各剩\(1\)颗樱桃。

这时就不能再照搬普通Nim的规则了,而要改用misere Nim的残局策略:

  1. 如果\(m\)是奇数,就把那只较大的碗一次拿空;
  2. 如果\(m\)是偶数,就把那只较大的碗减到只剩\(1\)颗。

这样做的目的,是把一个奇数个\(1\)的局面留给Amit

因为当所有非空碗里都只剩\(1\)颗樱桃时,玩家每一步都只能拿走其中一整碗,也就是拿走一个\(1\)。于是:

  • 面对\(1\)\(1\)的人会立刻输,因为他只能拿走最后一颗;
  • 面对\(2\)\(1\)的人会赢,因为他拿走一个后,给对方留下\(1\)个;
  • 一般地,面对奇数个\(1\)的人必败,面对偶数个\(1\)的人必赢。

所以,无论\(m\)的奇偶如何,你都可以在这个阶段把“奇数个\(1\)”留给Amit。此后双方只能一颗一颗地拿,奇偶性轮流变化,最后就会轮到Amit去拿那最后一颗樱桃。

Next