HDU1851

/*
简单的sg游戏
*/

#include <cstdio>
#include <cstring>

int T;
int N;
int A[22],L[22];
int sg[22];

int dfs(int x,int m)
{
	int& cur = sg[x];
	if(cur!=-1)return cur;

	bool used[22] ={0};
	for(int i=1;i<=m;i++)
	{
		if(x>=i) used[ dfs(x-i,m) ] = 1;
	}
	for(int i=0;;i++)
	{
		if(!used[i])
		{
			cur = i;break;
		}
	}
	return cur;
}

int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&N);
		for(int i=0;i<N;i++)
		{
			scanf("%d %d",A+i,L+i);
		}

		int ans = 0;
		for(int i=0;i<N;i++)
		{
			memset(sg,-1,sizeof(sg));
			sg[0] = 0;
			ans ^= dfs(A[i],L[i]);
		}
		if(ans) printf("No\n");
		else printf("Yes\n");
	}
	return 0;
}
posted @ 2011-06-17 00:38  AC2012  阅读(325)  评论(0编辑  收藏  举报