• 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;
    }
    
  • 相关阅读:
    iOS多线程_06_GCD其它用法
    iOS多线程_05_线程间通信NSThread/GCD
    iOS多线程_04_GCD
    iOS多线程_03_Block
    iOS多线程_02_多线程的安全问题
    iOS多线程_01_简介和NSThread
    shell 根据端口号输出所有的pid
    【java核心36讲】接口和抽象类的区别
    CSS布局
    CSS基础
  • 原文地址:https://www.cnblogs.com/smyjr/p/10370078.html
Copyright © 2020-2023  润新知