标签:
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2299
题解:乱搞就可以了。。。
不妨认为有用的只有(a,b)(a,-b)(b,a)(b,-a)
然后设他们的系数分别为x1,x2,x3,x4,则有
(x1+x2)*a+(x3+x4)*b=x
(x1-x2)*b+(x3-x4)*a=y
方程ax+by=c有解的充要条件是c|gcd(a,b)
但这样并不能保证方程组有解,所以还要满足一个条件就是x1+x2与x1-x2同奇偶,34同理。
我们只要求出解的通项然后随便带两个本质不同的进去就行了。当然多一点也不会超时。
代码:
1 #include<cstdio> 2 3 #include<cstdlib> 4 5 #include<cmath> 6 7 #include<cstring> 8 9 #include<algorithm> 10 11 #include<iostream> 12 13 #include<vector> 14 15 #include<map> 16 17 #include<set> 18 19 #include<queue> 20 21 #include<string> 22 23 #define inf 1000000000 24 25 #define maxn 200000+5 26 27 #define maxm 200000+5 28 29 #define eps 1e-10 30 31 #define ll long long 32 33 #define pa pair<int,int> 34 35 #define for0(i,n) for(int i=0;i<=(n);i++) 36 37 #define for1(i,n) for(int i=1;i<=(n);i++) 38 39 #define for2(i,x,y) for(int i=(x);i<=(y);i++) 40 41 #define for3(i,x,y) for(int i=(x);i>=(y);i--) 42 43 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go) 44 45 #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) 46 47 #define mod 1000000007 48 49 #define mid ((l+r)>>1) 50 51 #define lch k<<1,l,mid 52 53 #define rch k<<1|1,mid+1,r 54 55 using namespace std; 56 57 inline int read() 58 59 { 60 61 int x=0,f=1;char ch=getchar(); 62 63 while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} 64 65 while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();} 66 67 return x*f; 68 69 } 70 inline void exgcd(ll a,ll b,ll &x,ll &y) 71 { 72 if(!b){x=1;y=0;return;} 73 exgcd(b,a%b,x,y); 74 ll t=x;x=y;y=t-a/b*y; 75 } 76 inline ll gcd(ll x,ll y){return y?gcd(y,x%y):x;} 77 inline bool check(ll x1,ll x2,ll x3,ll x4){return ((x1&1)==(x4&1))&&((x2&1)==(x3&1));} 78 79 int main() 80 81 { 82 83 freopen("input.txt","r",stdin); 84 85 freopen("output.txt","w",stdout); 86 87 int T=read(); 88 while(T--) 89 { 90 ll a=abs(read()),b=abs(read()),x=read(),y=read(),t=gcd(a,b),x1,x2,x3,x4,c,d;bool flag=0; 91 if(a<b)swap(a,b); 92 if(!a&&!b){if(!x&&!y)flag=0;else flag=1;} 93 else if(x%t||y%t)flag=1; 94 else 95 { 96 exgcd(a,b,c,d); 97 a/=t;b/=t; 98 x1=c*(x/t);x2=d*(x/t); 99 x3=c*(y/t);x4=d*(y/t); 100 if(check(x1,x2,x3,x4)||check(x1+b,x2-a,x3,x4)||check(x1,x2,x3+b,x4-a)||check(x1+b,x2-a,x3+b,x4-a))flag=0; 101 else flag=1; 102 } 103 puts(flag?"N":"Y"); 104 } 105 106 return 0; 107 108 }
标签:
原文地址:http://www.cnblogs.com/zyfzyf/p/4261799.html