题面:
题解:
每一组可以看作一个Ferguson游戏。
重点在怎么求Ferguson游戏的sg值上。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<bitset>
#include<algorithm>
#define ll long long
#define pr make_pair
#define pb push_back
using namespace std;
int get_sg(int n,int m)
{
if(n%2&&m%2) return 0;
if(n%2==0&&m%2==0) return get_sg(n/2,m/2)+1;
if(n%2) swap(n,m);
return get_sg(n,m+1);
}
int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int ans=0,x,y;
for(int i=1;i<=n/2;i++)
{
scanf("%d%d",&x,&y);
ans^=get_sg(x,y);
}
if(ans) printf("YES\n");
else printf("NO\n");
}
return 0;
}