题解:
最终结果与正负性无关,直接取绝对值即可。
不妨假设当前向量为(x0,y0)(x0,y0)。
通过等价,发现只有以下操作:
1、x0+2ax0+2a或y0+2ay0+2a
2、x0+2bx0+2b或y0+2by0+2b
3、x0+ax0+a,y0+by0+b
4、x0+bx0+b,y0+ay0+a
且3、4至多用一次,直接枚举后利用裴蜀定理即可。
那么什么是裴蜀定理呢?
介绍:
对于任意自然数a,ba,b,若gcd(a,b)=dgcd(a,b)=d,那么对于所有的整数x,yx,y,都有d|ax+byd|ax+by,且一定存在x,yx,y使得ax+by=dax+by=d成立。
特别地,方程ax+by=1ax+by=1有解当且仅当aa与互质。
推广:
设gcd(a1,a2,...,an)=dgcd(a1,a2,...,an)=d,那么存在整数x1,x2,...,xnx1,x2,...,xn使得a1x1+a2x2+...+anxn=da1x1+a2x2+...+anxn=d。
Code:Code:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll d;
bool f(ll x,ll y)
{
if(x%d==0&&y%d==0)return true;
return false;
}
int main()
{
int Q;
scanf("%d",&Q);
while(Q--)
{
ll a,b,x,y;
scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
d=__gcd(a,b)*2;
if(f(x,y)||f(x+a,y+b)||f(x+b,y+a)||f(x+a+b,y+b+a))puts("Y");
else puts("N");
}
return 0;
}