最近在做博弈题单,遇到了这两个nim问题。
SDOI2019\] 移动金币 被成为阶梯nim,也就是一个 n n n堆石子在不同的阶梯上面,每次操作可以选择一堆中若干个石子合并到低一级的阶梯(如果移动到地面就不能再移动),不能操作者失败。
这个问题我大概思考了一天就解决了,容易发现n=2时必败态为第一级阶梯为0,因为这样先手移动任何石子下来后手都能移到地面。把n拓展到更大,就会发现偶数级阶梯(现在假设地面为第0级阶梯)的石子时没有意义的,因为如果把偶数的石子移到奇数的石子能形成更好的局面,那么后手就能把这些石子再往移动一级,可以依次从第二级,第四级往下递推思考。
也就是说只用考虑奇数级阶梯的石子,又因为把石子移到偶数级的阶梯以后没有意义,那么就变成了在偶数级阶梯进行经典的nim操作,因此必败态就是所有偶数级阶梯的异或和。
\[SDOI2019\] 移动金币 被称为k-nim也就是每次可以取不超过k堆的石子。我花了大概一周才解决,感觉非常让人抓狂,最后是在操场上散步突然想到结论的。这个结论现在还没有想好怎么证明,后续补上。
感觉这个问题打表比较困难,不过我想了一种直接打出必败态的方法。
```cpp
#include