【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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值