#include <iostream>
using namespace std;
const int N = 1e5 + 10;
// a[i]代表第i堆石子的数量; a[0]=2代表第0堆有两个石子
int a[N];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
// 若每堆石子的数量相互异或后的值不等于0, 则先手必胜; 若每堆石子的数量相互异或后值为0, 则先手必败
// 注意这里异或是二进制异或, 样例就是010和011异或,值不为0,先手必胜
int s = 0;
for (int i = 0; i < n; i ++ ) s ^= a[i];
cout << (s ? "Yes" : "No") << endl;
return 0;
}
算法板子:博弈论——Nim游戏判断是否是先手必胜
最新推荐文章于 2024-09-12 19:02:20 发布