给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。
输入格式
第一行包含整数 n。
第二行包含 n 个数字,其中第 i个数字表示第 i堆石子的数量。
输出格式
如果先手方必胜,则输出 Yes。
否则,输出 No。
数据范围
1≤n≤1051≤≤105,
1≤每堆石子数≤109
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n;
int a[N];
int m;
int main()
{
cin>>n;
m=0;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
m^=a[i];
}
if(m)//全部异或不为0则先手盛不然先手输
cout<<"Yes";
else cout<<"No";
return 0;
}