练习1: 牛客 75D 小牛vs小客
小牛和小客玩石子游戏,他们用n个石子围成一圈,小牛和小客分别从其中取石子,谁先取完谁胜,每次可以从一圈中取一个或者相邻两个,每次都是小牛先取,请输出胜利者的名字(小牛获胜输出XiaoNiu,小客获胜输出XiaoKe)(1 2 3 4 取走 2 13 不算相邻)
$n=1$或$n=2$先手必胜, 否则必败.
这是由于$nge 3$时, 先手取后一定会断成链, 考虑链上博弈的情况.
长为$n$的链取后会断成两个独立的游戏, 那么若$n$为奇数, 直接取中间, 否则取中间两个, 这样后继的SG值异或就为0, 所以必胜.
练习2: 牛客 75F 小牛再战
共有N堆石子,已知每堆中石子的数量,两个人轮流取石子,每次只能选择N堆石子中的一堆取一定数量的石子(最少取一个),取过子之后,还可以将该堆石子中剩余的石子随意选取几个放到其它的任意一堆或几堆上。等哪个人无法取子时就表示此人输掉了游戏。注意:一堆石子没有子之后,就不能再往此处放石子了。 假设每次都是小牛先取石子,并且游戏双方都绝对聪明,现在给你石子的堆数、每堆石子的数量,请判断出小牛能否获胜。
石子数量的的出现次数有奇数则先手必胜, 否则必败. 因为若存在出现次数为奇数的堆, 一定可以用数量最大的出现次数为奇数的堆使其余出现次数为奇数的堆变成出现次数为偶数的堆