题解:P2197 【模板】Nim 游戏
来自一位 AFOer 的题解,解法针对的是博弈论并非算法。
思路
首先这个游戏肯定有必胜方法,不然这道题也就失去了意义。
我们进行一个很简单的推论:如果我这一步走向必胜,那么对方只有两个结果:
- 下一步走向必败。
- 没有下一步,直接输掉。
反之亦然。
我们从简单模型开始。
n=0 时
由于不存在石子,甲开局就输了。
n=1 时
当石子数量
n=2 时
正难则反。
甲若胜利,最后状态必然为:
因为甲需要必胜,所以默认双方聪明绝顶。为了构成这样的局面,乙就是别无选择地走向这个结局。所以轮到乙时,局面为:
一步步向前推,只要到乙操作时,
接下来我们的所有情况都可以用以上这个方法进行推导,我们就不展开了。
结论
当
代码
十分简单,只需要实现以上功能。复杂度:
#include<bits/stdc++.h>
using namespace std;
int ans,T,a,n;
int main()
{
scanf("%d",&T);
while(T--)
{
ans=0;
scanf("%d",&n);
while(n--)
{
scanf("%d",&a);
ans^=a;
}
if(ans==0)
{
printf("No\n");
}
else
{
printf("Yes\n");
}
}
return 0;
}