题目链接

题面:

题解:
每一组可以看作一个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;
}