版权声明:转载请声明出处,谢谢配合。 https://blog.csdn.net/zxyoi_dreamer/article/details/82948355
BZOJ传送门
洛谷传送门
解析:
首先石子是被分了组的,每一组显然可以看成一个 ,那么我们现在要想办法构造转移 。
其实转移的式子很好写
那么可以通过打表发现最后单个状态的
值就是
(蒟蒻暂时不会证明)
直接按照 定理 起来就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define gc getchar
#define pc putchar
#define cs const
inline
int getint(){
re int num=0;
re char c;
while(!isdigit(c=gc()));
while(isdigit(c))num=(num<<1)+(num<<3)+(c^48),c=gc();
return num;
}
int lowbit(int x){
return x&(-x);
}
int T;
int main(){
T=getint();
while(T--){
int n=getint();
int ans=0;
for(int re i=1;i<=n;i+=2){
int x=(getint()-1)|(getint()-1);
ans^=(int)log2(lowbit(x+1));
}
puts(ans?"YES":"NO");
}
return 0;
}