[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,分别表示可以拼出来,不能拼出来
输入输出样例
说明
样例解释:
第一组:(2,1)+(1,2)=(3,3)
第三组:(-1,0)+(-1,0)+(0,1)+(0,1)+(0,1)=(-2,3)
题解来自520dalao%%%
$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$ .
由裴蜀定理可得:$ax+by=c$ ,x和y有整数解的充要条件是 $gcd(a,b)|c$ ,
证明:令$a=pgcd(a,b),\ b=qgcd(a,b)$ ,则原式=$(px+qy)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 $ => $ 2gcd(a,b)|x$ 同理 $gcd(a,b)|y$
2、当(k+w)和(k-w)为偶数,(q+c)和(q-c)为奇数时,$(k+w)a+(q+c)b=x$ 先左右两边同加b,再提公因数2 结合$gcd(a,b)|x$ --> $2gcd(a,b)|x+b$ 同理 $2gcd(a,b)|y+a$
3、当(k+w)和(k-w)为奇数,(q+c)和(q-c)为偶数时,$(k+w)a+(q+c)b=x$ 先左右两边同加a,再提公因数2 结合$gcd(a,b)|x $ -->$2gcd(a,b)|x+a$ 同理 $2gcd(a,b)|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$ --> $2gcd(a,b)|x+a+b$ 同理 $2gcd(a,b)|y+a+b$
只要满足上述的任意一种情况,则说明本题k、w、q、c有整数解,说明可行,否则说明无解。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long lol;
lol a,b,x,y;
lol gcd(lol a,lol b)
{
if (!b) return a;
return gcd(b,a%b);
}
int main()
{int T,flag;
cin>>T;
while (T--)
{
scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
lol d=gcd(*a,*b);
flag=;
if (x%d==&&y%d==) flag=;
if ((x+a)%d==&&(y+b)%d==) flag=;
if ((x+b)%d==&&(y+a)%d==) flag=;
if ((x+a+b)%d==&&(y+a+b)%d==) flag=;
if (flag) printf("Y\n");
else printf("N\n");
}
}
Description
给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y)。
说明:这里的拼就是使得你选出的向量之和为(x,y)
Input
第一行数组组数t,(t<=50000)
接下来t行每行四个整数a,b,x,y (-2*109<=a,b,x,y<=2*109)
Output
t行每行为Y或者为N,分别表示可以拼出来,不能拼出来
Sample Input
2 1 3 3
1 1 0 1
1 0 -2 3
Sample Output
N
Y
HINT
样例解释:
第一组:(2,1)+(1,2)=(3,3)
第三组:(-1,0)+(-1,0)+(0,1)+(0,1)+(0,1)=(-2,3)
[HAOI2011]向量的更多相关文章
- 【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 给你一 ...
- P2520 [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) ...
- luogu P2520 [HAOI2011]向量
传送门 一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq Orzyyb 这题欺负我数学不好qwq 首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面 ...
随机推荐
- 实验四:Android 开发基础
实验四:实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:5月26日 实验密级: 非密级 预习程度: 已预习 必修/选修 ...
- Tornado 网站demo 一
web服务器的工作过程 创建 listen socket, 在指定的监听端口, 等待客户端请求的到来 listen socket 接受客户端的请求, 得到 client socket, 接下来通过 c ...
- js的 == 和 ===的区别
1.对于string,number等基础类型,==和===是有区别的 不同类型间比较,==之比较转化成同一类型后的值看值是否相等,===如果类型不同,其结果就是不等,同类型比较,直接进行"值 ...
- Fluent Interface(流式接口)
我最初接触这个概念是读自<<模式-工程化实现及扩展>>,另外有Martin fowler大师 所写http://martinfowler.com/bliki/FluentInt ...
- 51Nod P1100 斜率最大
传送门: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1100 由于2 <= N <= 10000, 所以 ...
- Java 多线程 从无到有
个人总结:望对屏幕对面的您有所帮助 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是程序(任务)的执行过程,它持有资源(共享内存, ...
- hadoop基础教程免费分享
提起Hadoop相信大家还是很陌生的,但大数据呢?大数据可是红遍每一个角落,大数据的到来为我们社会带来三方面变革:思维变革.商业变革.管理变革,各行业将大数据纳入企业日常配置已成必然之势.阿里巴巴创办 ...
- eclipse+Maven插件报错:-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
问题描述: eclipse indigo+maven3.3.3+jdk1.70 maven插件执行报错:-Dmaven.multiModuleProjectDirectory system prope ...
- java中的interface
转载: Java不支持多重继承,即一个类只能有一个父类 为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口 接口是抽象方法和常量值定义的集合,是一种特殊的抽象类接口中只包含常量和方法的定 ...
- jenkins创建multibranch pipeline
参考以下文章进行实践: https://jenkins.io/doc/pipeline/tour/hello-world/#what-is-a-jenkins-pipeline (看见一个介绍的还不错 ...