zoukankan      html  css  js  c++  java
  • 牛客19985 HAOI2011向量(裴属定理,gcd)

    https://ac.nowcoder.com/acm/problem/19985

    看到标签“裴属定理”就来做下,很眼熟,好像小学奥数学过。。

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

    思路:如(a,b)和(-a,-b)选一个就行。8个操作相当于4个...(a,b) , (b,a) , (a,-b) , (-b,a),设每个操作次数是x1,x2, x3,x4 , 则

    对横坐标的贡献:(x1+x3)*a + (x2-x4)*b = x

    对纵坐标的贡献:(x1-x3)*b + (x2+x4)*a = y

    要让两方程有解,记gcd = gcd(a,b),则根据裴属定理需gcd|x , gcd|y,然而(x1-x3) , (x1+x3)...同奇偶,有四种情况:奇奇奇奇,偶偶偶偶,奇偶奇偶,偶奇偶奇(从左到右,从上到下),

    使奇数+1后四个未知数(x1+x3)...都变为偶数,提出一个2与系数a,b结合,即gcd *= 2,然后四种情况只要有一种成立即可。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 ll g;
     5 
     6 inline bool check(ll a,ll b){
     7     return (!(a%g)) && (!(b%g));
     8 }
     9 
    10 int main(){
    11     ios::sync_with_stdio(0);
    12     cin.tie(0);
    13     cout.tie(0);
    14     int t;
    15     cin>>t;
    16     while(t--){
    17         ll a,b,x,y;
    18         cin>>a>>b>>x>>y;
    19         g = 2*__gcd(a,b);
    20         puts( ( check(x,y)||check(x+a,y+b)||
    21                check(x+b,y+a)||check(x+a+b,y+a+b) ) ? "Y" : "N");
    22     }
    23     return 0;
    24 }
    View Code
  • 相关阅读:
    事务处理语言(TCL)
    SQL,T-SQL简介
    centos 8 集群Linux环境搭建
    graphviz 的使用教程
    pyttsx3 的使用教程
    python 连接 SQL Server 数据库(使用 pymssql 库)
    python 连接 SQL Server 数据库(使用 pyodbc 库)
    C++注释规范
    IP分配及网段划分
    关于对象的浅度拷贝和深度拷贝
  • 原文地址:https://www.cnblogs.com/wzgg/p/11366968.html
Copyright © 2011-2022 走看看