小 $C$ 的游戏
$Description$
$Solution$
打表好题
首先约定 $P-position$ 表示先手必败, $N-position$ 表示先手必胜。
本题并不需要用到 $SG$ 函数等知识,只需要懂得如何对博弈论的局面进行转移即可。
如此就引出了关于博弈论题目的打表技巧。
首先,我们要分析题目中的状态转移条件。
如本题,一个大小为 $n$ 的石子堆可以转移到 $n - 1$ 个石子或者是 $d_i\ (i \in n)$ ,即 $n$ 的所有约数。
所以,我们的打表程序可以先根据题意初始化前面几个状态,然后从小到大依次枚举 $i$ ,然后枚举所有 $i$ 能转移到的状态,判断他是否是 $P-position$ ,如果是那么当前的 $i$ 就为 $N-position$ ,这是根据定理得出的。
之后就根据打表程序找规律即可。
打表代码:
1 | inline void Init () { |
然后我们找规律发现,除了 $2$ 和 $17$ 以外的质数都是 $P-position$ ,除了 $16,\ 34,\ 289$ 以外的合数都是 $N-position$ 。
再特判掉 $1$ ,就做完了。
$Code:$
1 |
|