【HAOI2011】向量(裴蜀定理+gcd)

传送门

通过一段大力分析,我们发现其实转化成了

x,y +-2a || +-2b || +a,+b || +b,+a 其中,后两个操作分别最多进行一次(因为多了过后就可以转化成前两种操作)

此时我们可以联想到裴蜀定理:若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数

也就是说,**必须当d|x,d|y的时候,x,y才能被2a,2b构造出来

当然,我们还要判断(x+a,y+b),(x+b,y+a),(x+a+b,y+b+a),因为还有后两种操作

//需要开longlong
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int T;
ll d;
inline ll gcd(ll x,ll y),
{
	if(y==0)	return x;
	else return gcd(y,x%y);
} 
inline bool check(ll u,ll v)
{
	if(u%d==0&&v%d==0)	return true;
	else return false;
}
int main()
{
	cin>>T;
	for(int i=1;i<=T;i++)
	{
		ll a,b,x,y;
		cin>>a>>b>>x>>y;
		d=gcd(2*a,2*b);
		if(check(x,y)||check(x+a,y+b)||check(x+b,y+a)||check(x+a+b,y+b+a))	puts("Y");
		else puts("N");
	}
	return 0;
} 
posted @ 2018-09-15 23:01  Patrickpwq  阅读(138)  评论(0编辑  收藏  举报