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

    靠瞎猜的数学题

    首先我们先对这些向量进行一顿组合,会发现((a,b)(a,-b))可以组合成((2a,0))((b,-a)(b,a))可以组合成((2b,0)),同理((0,2a))((0,2b))自然也是可以组合成的

    这个(0)很有用,可以只对一项考虑

    所以如果这个时候有(2ax+2by=X),(2ax+2by=Y),就可以满足了

    根据贝祖定理如果((2a,2b)|X)((2a,2b)|Y)那么这个时候就满足了

    之后还有一些情况

    1. 加上一个((a,b)),变成(2ax+2by=X+a)(2ax+2by=Y+b)

    2. 加上一个((b,a)),变成(2ax+2by=X+b)(2ax+2by=Y+a)

    3. ((a,b))((b,a))都加上,变成(2ax+2by=X+a+b)(2ax+2by=Y+a+b)

    还是分别套用贝祖定理就可以解决了

    代码

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define max(a,b) ((a)>(b)?(a):(b))
    #define LL long long
    #define re register
    LL gcd(LL a,LL b)
    {
    	if(!b) return a;
    	return gcd(b,a%b);
    }
    inline LL read()
    {
    	char c=getchar();
    	LL x=0,r=1;
    	while(c<'0'||c>'9') 
    	{
    		if(c=='-') r=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9')
    		x=(x<<3)+(x<<1)+c-48,c=getchar();
    	return x;
    }
    int T;
    LL a,b,x,y,now;
    int main()
    {
    	T=read();
    	while(T--)
    	{
    		a=read(),b=read(),x=read(),y=read();
    		if(!a&&!b)
    		{
    			if(!x&&!y) puts("Y");
    				else puts("N");
    			continue;
    		}
    		if(!a||!b)
    		{
    			if(x%max(a,b)==0&&y%max(a,b)==0) puts("Y");
    				else puts("N");
    			continue;
    		}
    		now=gcd(2*a,2*b);
    		if(x%now==0&&y%now==0) puts("Y");
    			else if((x+a)%now==0&&(y+b)%now==0) puts("Y");
    				else if((x+b)%now==0&&(y+a)%now==0) puts("Y");
    					else if((x+a+b)%now==0&&(y+a+b)%now==0) puts("Y");
    						else puts("N");
    	}
    	return 0;
    }
    
  • 相关阅读:
    使用JavaScript发布订阅设计模式实现Ajax请求节流
    浏览器获取鼠标光标坐标
    JavaScript正则表达式
    git 入门以及git客户端的常用命令
    Chrome 开发者工具的使用介绍
    CSS3动画的使用以及优化
    移动的自适应方法
    新手如何编写测试用例
    Python接口测试入门
    MySQL的基本语句(一)
  • 原文地址:https://www.cnblogs.com/asuldb/p/10205707.html
Copyright © 2011-2022 走看看