比赛 20120721 评测结果 AAAAAAAEEE
题目名称 取火柴 最终得分 70
用户昵称 Truth.Cirno 运行时间 0.401 s
代码语言 C++ 内存使用 5.07 MiB
提交时间 2012-07-21 10:01:48
显示代码纯文本
#include <cstdio>
using namespace std;

int cy[1001],ynum[1001][1001];
bool lose[1001][1001];

int main(void)
{
	freopen("bet.in","r",stdin);
	freopen("bet.out","w",stdout);
	int i,j,k,n,x,y,temp;
	bool found;
	for (i=1;i<=1000;i++)
	{
		ynum[i][cy[i]++]=i;
		if (i!=1)
			ynum[i][cy[i]++]=1;
		for (j=2;j*j<=i;j++)
			if (i%j==0)
			{
				ynum[i][cy[i]++]=j;
				if (j*j!=i)
					ynum[i][cy[i]++]=i/j;
			}
	}
	for (i=1;i<=1000;i++)
		for (j=i;j<=1000;j++)
		{
			found=false;
			for (k=0;!found&&k<cy[i];k++)
			{
				y=j-ynum[i][k];
				if (y>=0)
				{
					x=i;
					if (x>y)
					{
						temp=x;
						x=y;
						y=temp;
					}
					if (lose[x][y])
					{
						found=true;
					}
				}
				else
				{
					continue;
				}
			}
			for (k=0;!found&&k<cy[j];k++)
			{
				x=i-ynum[j][k];
				if (x>=0)
				{
					y=j;
					if (x>y)
					{
						temp=x;
						x=y;
						y=temp;
					}
					if (lose[x][y])
					{
						found=true;
					}
				}
				else
				{
					continue;
				}
			}
			if (!found)
				lose[i][j]=true;
		}
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d%d",&x,&y);
		if (x>y)
		{
			temp=x;
			x=y;
			y=temp;
		}
		if (lose[x][y])
			printf("No\n");
		else
			printf("Yes\n");
	}
	return(0);
}