HAOI2011 向量

Posted fengxunling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HAOI2011 向量相关的知识,希望对你有一定的参考价值。

题目链接:戳我

其实我们观察一下这八个衍生的向量,可以知道本质上它们只有4个。

((a,b),(-a,b),(b,a),(b,-a))

之后就是
[egin{cases} an+am+bp+bq=x\ bn-bm+ap-aq=y end{cases}]

合并同类项——
[egin{cases}(n+m)a+(p+q)b=x\(p-q)a+(n-m)b=yend{cases}]

之后裴蜀定理,存在整数解的充要条件是(gcd(a,b)|x)&&(gcd(a,b)|y)

但是注意这个只是((n+m),(n-m),(p+q),(p-q))有整数解的判断!具体的我们还需要它们对应的,同奇偶

所以分类讨论——

  • 都是偶数
    [egin{cases}frac{n+m}{2}a+frac{p+q}{2}b=frac{x}{2}\frac{p-q}{2}a+frac{n-m}b=frac{y}{2}end{cases}]

(gcd(2*a,2*b)|x) and (gcd(2*a,2*b)|y)

  • 一奇一偶(这里以n+m和n-m为奇数为例)
    [egin{cases}frac{n+m+1}{2}a+frac{p+q}{2}b=frac{x+a}{2}\frac{p-q}{2}a+frac{n-m+1}b=frac{y+b}{2}end{cases}]

(gcd(2*a,2*b)|(x+a)) and (gcd(2*a,2*b)|(y+b))
or
(gcd(2*a,2*b)|(x+y)) and (gcd(2*a,2*b)|(y+a))

  • 两奇
    [egin{cases}frac{n+m+1}{2}a+frac{p+q+1}{2}b=frac{x+a+b}{2}\frac{p-q+1}{2}a+frac{n-m+1}b=frac{y+a+b}{2}end{cases}]

(gcd(2*a+2*b)|(x+a+b)) and (gcd(2*a+2*b)|(y+a+b))

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n; 
long long a,b,x,y;
inline long long gcd(long long x,long long y){return y==0?x:gcd(y,x%y);}
int main()
{
    #ifndef ONLINE_JUDGE
    freopen("ce.in","r",stdin);
    #endif
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
        long long cur2=gcd(2*a,2*b);
        if(x%cur2==0&&y%cur2==0) printf("Y
");
        else if((x+a)%cur2==0&&(y+b)%cur2==0) printf("Y
");
        else if((x+b)%cur2==0&&(y+a)%cur2==0) printf("Y
");
        else if((x+a+b)%cur2==0&&(y+a+b)%cur2==0) printf("Y
");
        else printf("N
");
    }
    return 0;
}

以上是关于HAOI2011 向量的主要内容,如果未能解决你的问题,请参考以下文章

[haoi2011]向量

裴蜀定理 BZOJ2299[HAOI2011] 向量

[HAOI 2011]向量

[BZOJ 2299][HAOI 2011]向量 题解(裴蜀定理)

[HAOI2011]向量

HAOI2011 向量