zoukankan      html  css  js  c++  java
  • luogu P2520 [HAOI2011]向量

    传送门

    一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq

    Orzyyb

    这题欺负我数学不好qwq

    首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面两个也可以看做减)

    然后可以考虑先只用(2a)(2b)去凑(x,y),但是因为后两个操作,也可以去凑(x+a,y+b),(x+b,y+a),(x+a+b,y+a+b),然后化为(x,y)

    有个叫裴蜀定理的东西,(ax+by=c)当且仅当(c|gcd(a,b))

    所以如果上面四个二元组中有一个满足两个元素都是(2gcd(a,b))的倍数就有解了

    #include<bits/stdc++.h>
    #define LL long long
    #define il inline
    #define re register
    
    using namespace std;
    il LL rd()
    {
        LL x=0,w=1;char ch=0;
        while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
        return x*w;
    }
    il int gcd(int a,int b){return b?gcd(b,a%b):a;}
    
    int main()
    {
        int T=rd();
        while(T--)
        {
            LL a=rd(),b=rd(),x=rd(),y=rd(),d=gcd(a,b)<<1;
            if(x%d==0&&y%d==0) puts("Y");
            else if((x+a)%d==0&&(y+b)%d==0) puts("Y");
            else if((x+b)%d==0&&(y+a)%d==0) puts("Y");
            else if((x+a+b)%d==0&&(y+a+b)%d==0) puts("Y");
            else puts("N");
        }
        return 0;
    }
    
  • 相关阅读:
    闭包(closure)与协程共用时要注意的事情
    mysql---视图
    职责链模式
    JavaScript DOM(一)
    9.7 迭代
    [BLE--Link Layer]设备蓝牙地址
    Loopback測试软件AX1用户手冊 V3.1
    操作系统
    OpenCV特征点检測------Surf(特征点篇)
    linux 命令 xxd
  • 原文地址:https://www.cnblogs.com/smyjr/p/10370078.html
Copyright © 2011-2022 走看看