题目链接
题意介绍了一遍Nim取石子游戏,可以看上一篇文章详细介绍。
问当前状态的必胜走法个数,也就是走到必败状态的方法数。
我们设sg
为所有个数的Xor值。
首先如果sg==0
,它不可能有必胜走法,输出0.
对于任意一堆有a[i]
个石子,若sg Xor a[i] <= a[i]
,那么我们就可以在a[i]
里面取出sg Xor a[i]
个石子,使得剩下石子Xor和为0,于是ans++。然后输出ans。
注意C/C++语言中^
操作比<
操作优先级低。
代码: https://gist.github.com/zrt/3e87442a246bb9e85055