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

    来自FallDream的博客,未经允许,请勿转载,谢谢。


     

    t组数据给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y)。

    说明:这里的拼就是使得你选出的向量之和为(x,y)      t<=10000 a,b是int

    裴蜀定理:方程ax+by=m有解当且仅当m是gcd(a,b)的倍数。

    这道题显然我们可以通过合成向量得到2a,2b,-2a,-2b,然后剩下的(a,b)(b,a)(a+b,a+b)最多只会用一次,都check一下呗。

    #include<iostream>
    #include<cstdio>
    #define ll long long
    using namespace std;
    char B[1<<26],*S=B;
    #define getchar() (*S++)
    int X,F;char ch;
    inline int read()
    {
        X = 0 , F = 0 , ch = getchar();
        while(ch < '0' || ch > '9'){ if(ch == '-') F = 1;  ch = getchar();}
        while(ch >= '0' && ch <= '9'){X = X * 10 + ch - '0';ch = getchar();}
        return F?-X:X;
    }
    
    inline bool check(ll a,ll b,ll c){return a%c==0&&b%c==0;}
    inline int gcd(ll x,ll y){return !y?x:gcd(y,x%y);}
    
    int main()
    {
        fread(B,1,1<<26,stdin);register ll a,b,x,y;
        for(register int T=read();T;--T)
        {
            a=read(),b=read(),x=read(),y=read();
            ll g=gcd(a<<1,b<<1);
            if(check(x,y,g)||check(x+a,y+b,g)||check(x+b,y+a,g)||check(x+a+b,y+a+b,g))puts("Y");
            else puts("N");
        }
        return 0;
    }
  • 相关阅读:
    OAuth2.0协议流程
    记多个微服务同时被kill分析
    记一次调用API遇到的问题
    win10安装mysql遇到的坑
    nagios
    rmp安装mysql5.6
    桥接模式-xshell连接虚拟机
    VMWare虚拟机-网络适配器
    ***时间目录***
    docker常用命令
  • 原文地址:https://www.cnblogs.com/FallDream/p/bzoj2299.html
Copyright © 2011-2022 走看看