UVA10165
upd 2024/05/16:已经通过的题解添加了 Nim 游戏必胜/必败状态的证明。
Nim 游戏模板题。
可以使用 SG 定理来求解这个题目。其中有定义
发现
为什么
SG 定理和 SG 函数的定义
如果一个状态
x 可以转移到a_1,a_2,a_3,\cdots,a_k 这些状态,那这个状态的值就是\operatorname{mex}\{a_1,a_2,a_3,\cdots,a_k\} ,其中终止状态的 SG 值为0 。如果一个状态的 SG 值为
0 就是必败状态,否则就是必胜状态。
我们发现对于一个状态
为什么必胜状态是这样的?证明:
首先必败状态是
若此时异或状态不为
所以说,对于每一组数据,只需要将所有输入的值异或起来,若答案为
记得是多组数据。
#include <stdio.h>
int main() {
int n;
while (scanf ("%d", &n) && n) {
int xr = 0;
for (int i = 1; i <= n; i ++) {
int x;
scanf ("%d", &x);
xr ^= x;
}
if (xr)
puts("Yes");
else
puts("No");
}
return 0;
}