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

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

    Solution

    等价于以下操作集合

    • (x pm 2a)

    • (y pm 2a)

    • (x pm 2b)

    • (y pm 2b)

    • (x +a, y+b)

    • (x+b,y+a)

    (A=2a,B=2b,d=(A,B))

    则方程
    (iA+jB=x)

    (iA+jB=y) 一定都有解

    根据裴蜀定理
    ((a,b)=d ightarrow d|ax+by forall x,y)

    不妨先将坐标对 (d) 取模,那么 (i,j) 取值只能为 (0,1),都检验一遍即可

    #include <bits/stdc++.h>
    using namespace std;
    
    int a,b,x,y;
    
    int main() {
        int t;
        cin>>t;
        while(t--) {
            cin>>a>>b>>x>>y;
            int d=__gcd(a,b)*2;
            a%=d;b%=d;x%=d;y%=d;
            if((x%d==0 && y%d==0) ||
               ((x+a)%d==0 && (y+b)%d==0) ||
               ((x+b)%d==0 && (y+a)%d==0) ||
               ((x+a+b)%d==0 && (y+b+a)%d==0))
                puts("Y");
            else puts("N");
        }
    }
    
  • 相关阅读:
    2-7
    2-6
    2-5
    2-4
    2-3
    2-1
    2-2
    1-1
    5-7
    第六章例6-1
  • 原文地址:https://www.cnblogs.com/mollnn/p/12301058.html
Copyright © 2011-2022 走看看