题目传送门:https://www.luogu.org/problemnew/show/P2520
题意:
有8个向量(a,b),(a,-b),(-a,b),(-a,-b),(b,a),(b,-a),(-b,a),(-b,-a),求是否能拼出向量(x,y)。
思路:
最近刚从必修4学完平面向量,就可以用了,好开心,好激动!
可惜,想了一会儿不会做。
发现其实实质上只有4个向量:(a,b),(b,a),(a,-b),(b,-a),因为(-a,b)=-(a,-b),(-a,-b)=-(a,b),(-b,a)=-(b,-a),(-b,-a)=-(b,a)。
然后就推公式,发现可以用裴蜀定理来解。
具体请看:five20。
代码:
#include<cstdio>
#define LL long long
LL a,b,x,y,p;
LL gcd(LL x,LL y)
{
return !y?x:gcd(y,x%y);
}
bool check(LL x,LL y)
{
return !(x%p)&&!(y%p);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld %lld %lld %lld",&a,&b,&x,&y);
p=(gcd(a,b)<<1);
printf(check(x,y)||check(x+a,y+b)||check(x+b,y+a)||check(x+a+b,y+a+b)?"Y\n":"N\n");
}
}