题意
有n堆石子,每人必须从任意一堆石子取任意多的石子(/not = 0),不能行动者输
题解
SG函数
可以发现,对于第i堆石子a[i],可以达到0 ~ a[i] - 1这n个状态,故SG(a[i]) = a[i](SG值从0开始)
然后用SG定理,求亦或和确定胜负
调试记录
无
#include <cstdio>
using namespace std;
int T, n;
int main(){
scanf("%d", &T);
while (T--){
scanf("%d", &n);
int ans = 0;
for (int x, i = 1; i <= n; i++){
scanf("%d", &x);
ans ^= x;
}
if (ans) printf("Yes\n");
else printf("No\n");
}
return 0;
}