题意:
给出有n堆石子;然后每次选一堆,取不能超过一半;谁不能取了,谁就输了;
思路:
标准NIM博弈题;不过还是ai 太大,我们不能求出所有sg值;
所以先求小部分sg值;然后找规律;
观察得出;sg(n) = n % 2 == 0 ? n/2 : sg(n/2);
#include<cstdio>
#include<cstring>
#define ll long long
ll SG(ll x){
return x % 2 == 0 ? x / 2 : SG(x / 2);
}
int main() {
int t;
scanf("%d", &t);
while(t--) {
ll sum = 0;
ll tmp;
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%lld", &tmp);
sum ^= SG(tmp);
}
if(sum)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}