题意:
给你M堆物品,让两个人进行轮流选择,每一个人可以选择任意一堆的任意个物品,假设每个人都很聪明,求解这种情况下是前者必赢还是后者必赢,
直接Nim博弈,判断sum = A[0] ^ A[1] ^ A[2] ...即可
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 20 + 5;
const int MAXM = 1e3 + 5;
int A[MAXN], n;
int main(){
while(~scanf("%d", &n)){
int sum = 0;
for(int i = 0;i < n;i ++){
scanf("%d", &A[i]);
sum ^= A[i];
}
if(sum){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}