P2520 [HAOI2011]向量
题目描述
给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y)。
说明:这里的拼就是使得你选出的向量之和为(x,y)
输入输出格式
输入格式:
第一行数组组数t,(t<=50000)
接下来t行每行四个整数a,b,x,y (-2*10^9<=a,b,x,y<=2*10^9)
输出格式:
t行每行为Y或者为N,分别表示可以拼出来,不能拼出来
输入输出样例
3
2 1 3 3
1 1 0 1
1 0 -2 3
Y
N
Y
说明
样例解释:
第一组:(2,1)+(1,2)=(3,3)
第三组:(-1,0)+(-1,0)+(0,1)+(0,1)+(0,1)=(-2,3)
Solution:
首先,我们注意到题目中的向量实际只有4种操作:$$(a,b),(b,a),(a,-b),(b,-a)$$
于是由题意得方程组:
$$k(a,b)+q(b,a)+w(a,-b)+c(b,-a)=(x,y) --> (k+w)a+(q+c)b=x,(k-w)b+(q-c)a=y$$
由裴蜀定理可得:$$a*x+b*y=c$$
x和y有整数解的充要条件是$$gcd(a,b)|c$$
证明:令$$a=p*gcd(a,b),b=q*gcd(a,b)$$
则原式=$$(p*x+q*y)*gcd(a,b)=c$$
显然因为gcd(a,b)为整数,而要使x和y为整数,则gcd(a,b)|c。
我们回到开始的方程组$$(k+w)a+(q+c)b=x,(k-w)b+(q-c)a=y$$
由裴蜀定理易得:(k+w),(q+c),(k-w),(q-c)均为整数的充要条件是$$gcd(a,b)|x且gcd(a,b)|y$$
但是注意到(k+w),(k-w)有整数解不一定k和w有整数解((q+c)和(q-c)是同理的)。此时不妨设$$(k+w)=f,(k-w)=g$$
则$$k=(f+g)/2,w=(f-g)/2$$
因为$$2|(f+g)且2|(f-g)$$
显然要使$k$和$w$均为整数则$f$和$g$均为偶数或均为奇数($(q+c)$和$(q-c)$同理)。
于是我们考虑这四种情况:
1、当$(k+w),(k-w),(q+c),(q-c)$均为偶数时,$(k+w)a+(q+c)b=x$ 提公因数$2$结合 $gcd(a,b)|x -->gcd(a,b)*2|x$ 同理 $gcd(a,b)*2|y$
2、当$(k+w),(k-w)$为偶数,$(q+c),(q-c)$为奇数时,$(k+w)a+(q+c)b=x$先左右两边同加$b$,再提公因数$2$结合 $gcd(a,b)|x-->gcd(a,b)*2|x+b$ 同理$gcd(a,b)*2|y+a$
3、当$(k+w),(k-w)$为奇数,$(q+c),(q-c)$为偶数时,$(k+w)a+(q+c)b=x$先左右两边同加$a$,再提公因数$2$结合$gcd(a,b)|x-->gcd(a,b)*2|x+a$ 同理$gcd(a,b)*2|y+b$
4、当$(k+w),(k-w),(q+c),(q-c)$均为奇数时,$(k+w)a+(q+c)b=x$先左右两边同加$a+b$,再提公因数$2$结合$gcd(a,b)|x-->gcd(a,b)*2|x+a+b$同理 $gcd(a,b)*2|y+a+b$
只要满足上述的任意一种情况,则说明本题$k,w,q,c$有整数解,说明可行,否则说明无解。
代码:
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define debug printf("%d %s\n",__LINE__,__FUNCTION__)
using namespace std;
ll t,a,b,x,y,k;
il int gi()
{
ll a=;char x=getchar();bool f=;
while((x<''||x>'')&&x!='-')x=getchar();
if(x=='-')x=getchar(),f=;
while(x>=''&&x<='')a=a*+x-,x=getchar();
return f?-a:a;
}
il ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
il bool check(ll x,ll y){return x%k==&&y%k==;}
int main()
{
t=gi();
while(t--){
a=gi(),b=gi(),x=gi(),y=gi();
k=gcd(a,b)*;
if(check(x,y)||check(x+a,y+b)||check(x+b,y+a)||check(x+a+b,y+a+b))printf("YE5\n");
else printf("N0\n");
}
return ;
}
P2520 [HAOI2011]向量的更多相关文章
- luogu P2520 [HAOI2011]向量
传送门 一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq Orzyyb 这题欺负我数学不好qwq 首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面 ...
- 【BZOJ2299】[HAOI2011]向量(数论)
[BZOJ2299][HAOI2011]向量(数论) 题面 BZOJ 洛谷 题解 首先如果我们的向量的系数假装可以是负数,那么不难发现真正有用的向量只有\(4\)个,我们把它列出来.\((a,b)(a ...
- 【BZOJ 2299】 2299: [HAOI2011]向量 (乱搞)
2299: [HAOI2011]向量 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1255 Solved: 575 Description 给你一 ...
- [HAOI2011]向量
题目描述 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量 ...
- 【[HAOI2011]向量】
靠瞎猜的数学题 首先我们先对这些向量进行一顿组合,会发现\((a,b)(a,-b)\)可以组合成\((2a,0)\),\((b,-a)(b,a)\)可以组合成\((2b,0)\),同理\((0,2a) ...
- BZOJ2299 [HAOI2011]向量 【裴蜀定理】
题目链接 BZOJ2299 题解 题意就是给我们四个方向的向量\((a,b),(b,a),(-a,b),(b,-a)\),求能否凑出\((x,y)\) 显然我们就可以得到一对四元方程组,用裴蜀定理判断 ...
- 牛客19985 HAOI2011向量(裴属定理,gcd)
https://ac.nowcoder.com/acm/problem/19985 看到标签“裴属定理”就来做下,很眼熟,好像小学奥数学过.. 题意:给你a,b,x,y,你可以任意使用(a,b), ( ...
- [HAOI2011] 向量 - 裴蜀定理
给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y) ...
- BZOJ2299: [HAOI2011]向量
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2299 题解:乱搞就可以了... 不妨认为有用的只有(a,b)(a,-b)(b,a)(b,-a) ...
随机推荐
- 一个非常标准的连接Mysql数据库的示例代码
一.About Mysql 1.Mysql 优点 体积小.速度快.开放源码.免费 一般中小型网站的开发都选择 MySQL ,最流行的关系型数据库 LAMP / LNMP Linux作为操作系统 Apa ...
- RPC原理解析
1.RPC原理解析 1.1 什么是RPC RPC(Remote Procedure Call Protocol) --远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络 ...
- 作业07-Java GUI编程
1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 关于事件.事件源.事件监听器的总结: 事件:用户在GUI上进行的操作,如鼠标单击.输入文字.关 ...
- python 二叉堆
BinaryHeap() 创建一个新的,空的二叉堆. insert(k) 向堆添加一个新项. findMin() 返回具有最小键值的项,并将项留在堆中. delMin() 返回具有最小键值的项,从堆中 ...
- 关于GPUImage的导入
对于GPUImage的使用方面,GitHub上已经非常详细了,就不一一赘述了,但是对于项目的导入来说,最好的方式是 1.下载GPUImage并解压 2.打开压缩包后如图 3.打开终端,cd到此目录 4 ...
- caffe实现GAN
我实现GAN网络结构比较复杂: 通过建立两个一模一样的网络,他们相对应的层共享权重,一个网络用来跟新D model另一个网络用来更新G model 更新G model的网络,D部分只进行梯度传递,不进 ...
- intellij idea 找不到或无法加载主类
解决intellij idea 找不到或无法加载主类,请看以下图文介绍 然后idea会重启,等idea启动后 右侧的maven clean 一下,然后再compile就解决了
- 用nodejs 开发的智能提示
用nodejs 开发的智能提示 时间:2014-07-01 03:50:18 类别:搜索引擎 访问: 2576 次 感谢:http://lutaf.com/223.htm 智能提示对于搜索非常重要,相 ...
- JavaScript的作用域链
/* js当中 每个函数都是一个执行环境 函数调用函数会进入新的执行环境结束之后再回来当前 作用域链: 在内部的作用域中可以访问和修改外部的变量 在外部作用域不能修改或者访问内部的变量 */ var ...
- 2017年Unity游戏开发视频教程(入门到精通)
本文是我发布的一个Unity游戏开发的学习目录,以后我会持续发布一系列的游戏开发教程,都会更新在这个页面上,适合人群有下面的几种: 想要做独立游戏的人 想要找游戏开发相关工作的人 对游戏开发感兴趣的人 ...