棋盘
jzoj 2297
题目大意:
在棋盘上有一个特殊的象,他可以向四个方向行走若干步(左上,左下,右上,右下),现在问从某一个点是否能到另外一个点
输入样例
5
1 1 2 2
2 3 2 2
1 2 4 3
3 4 2 2
1 1 1 1
输出样例
Yes
No
Yes
No
Yes
数据范围
对于30%的数据,0<T<=5,0<x,y,u,v<=4
对于50%的数据,0<T<=10,0<x,y,u,v<=500
对于100%的数据,0<T<=100,0<x,y,u,v<=10^8
解题思路:
我们可以先画一个图(如下图),初始位置是蓝色格子,我们如果只挑距离为1的就只可以跳到红色部分,如果距离更大,那结果也是不会变的,因为距离1可以合成其他的距离,所以我们只能跳到下图的红色部分,我们观察一下,可以发现x坐标之间的距离的奇偶性和y坐标之间的距离的奇偶性是一样的,如(3,3)可以到(4,6)(距离都是奇数)(3,5)(距离都是偶数)
代码:
#include<cstdio>
#define abs(a) (a)<0?-(a):(a)
using namespace std;
int t,x,y,u,v,s1,s2;
int main()
{scanf("%d",&t);while(t--){scanf("%d %d %d %d",&x,&y,&u,&v);s1=abs(x-u);//x坐标的距离s2=abs(y-v);//y坐标的距离if ((s1&1)==(s2&1)) printf("Yes\n");//判断奇偶性else printf("No\n");}
}