数据范围那么大,用SG函数递推肯定不行,无论空间还是时间都是不允许,只能先用SG函数跑一些小数据,然后打表找规律。找规律的话就是各种观察啊。这次就是看隔几个出现一次,然后就找到规律了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll SG(ll x)
{
return x&1?SG(x>>1):x;
}
int main()
{
ll T;
scanf("%lld",&T);
while(T--)
{
ll N;
scanf("%lld",&N);
ll nim=0,a;
while(N--)
{
scanf("%lld",&a);
nim^=SG(a);
}
if(nim) puts("YES");
else puts("NO");
}
return 0;
}