似乎这个题仍然比较简单。(但我仍然不会 233)
Problem
有一个只包含正整数的多重集 S ,A 和 B 博弈。每次 A 把 S 分成两个多重集 C1,C2 ,B 可以:
- 令 S 为 C1 ,并把 S 里的所有元素减一
- 令 S 为 C2 ,并把 S 里的所有元素减一
若某时刻 S 为空集,则 B 胜利,游戏结束。若某时刻 S 中存在一个 0 ,则 A 获胜。
求两人获胜的条件。
Solution
我们令
ϕ(S)=x∈S∑2−x
则 A 胜利的条件是 ϕ(S)≥1 ,否则 B 胜利。
首先我们可以很容易得到:
ϕ(S)=ϕ(C1)+ϕ(C2)
若 ϕ(S)<1 ,则 min(ϕ(C1)+ϕ(C2))<21 ,B 只需选择较小的那个即可。胜利条件不改变。
若 ϕ(S)≥1 ,我们要证明一定存在 S 可以分成两个集合 C1,C2 使得 ϕ(C1),ϕ(C2) 均不小于 21 。由于 ϕ(S) 是由若干个 2 的负幂加起来,所以一定存在一个 S 的子集 C ,使得 ϕ(C)=1 。我们证明 C 可以分成两个相等的集合即可。
对 ∥C∥ 用数学归纳法。
C 中存在两个元素显然是可行的。
否则,易知 C 中最小的两个元素必定是相等的。我们把这两个元素合成一个小 1 的元素,则 ϕ(C) 不变,元素个数少了 1 。有归纳法知必定有解。Q.E.D.