1 条题解
-
0
自动搬运
来自洛谷,原作者为

浅色调
**搬运于
2025-08-24 21:38:36,当前版本为作者最后更新于2018-02-07 18:01:46,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路:
(我不会调格式啊,可以去看我博客:five20) 首先,我们注意到题目中的向量实际只有4种操作:(a,b),(b,a),(a,-b),(b,-a)。于是由题意得方程组:
--> .
由裴蜀定理可得:,x和y有整数解的充要条件是 ,
证明:令,则原式=,显然因为为整数,而要使x和y为整数,则。
我们回到开始的方程组。由裴蜀定理易得:
使均为整数的充要条件是:
且。但是注意到(k+w),(k-w)有整数解不一定k和w有整数解((q+c)和(q-c)是同理的)。此时不妨设,则,因为且,显然要使k和w均为整数则f和g均为偶数或均为奇数((q+c)和(q-c)同理)。
于是我们考虑这四种情况:
1、当(k+w)、(k-w)、(q+c)、(q-c)均为偶数时, 提公因数2结合 => 同理
2、当(k+w)和(k-w)为偶数,(q+c)和(q-c)为奇数时, 先左右两边同加b,再提公因数2 结合 --> 同理
3、当(k+w)和(k-w)为奇数,(q+c)和(q-c)为偶数时, 先左右两边同加a,再提公因数2 结合 --> 同理
4、当(k+w)、(k-w)、(q+c)、(q-c)均为奇数时, 先左右两边同加a+b,再提公因数2 结合 --> 同理
只要满足上述的任意一种情况,则说明本题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=0;char x=getchar();bool f=0; while((x<'0'||x>'9')&&x!='-')x=getchar(); if(x=='-')x=getchar(),f=1; while(x>='0'&&x<='9')a=a*10+x-48,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==0&&y%k==0;} int main() { t=gi(); while(t--){ a=gi(),b=gi(),x=gi(),y=gi(); k=gcd(a,b)*2; 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 0; }
- 1
信息
- ID
- 1559
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者