bzoj2299[HAOI2011]向量

bzoj2299[HAOI2011]向量

题意:

有(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问能否拼出另一个向量(x,y)。

题解:

裴蜀定理(我不会)(实际上是与解同余方程的知识相关的)。题目可以转化为用(0,2a)、(2a,0)、(0,2b)、(2b,0)拼成(x,y)、(x+a,y+b)、(x+b,y+a)、(x+a+b,y+a+b)。这样就可以列方程了。题目要求判断方程是否有解,只要求出2a、2b的gcd,然后判断目标两个数能否整除这个gcd即可。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 long long gcd(long long a,long long b){return b==0?a:gcd(b,a%b);}
 7 inline bool check(long long x,long long y,long long z){return x%z==0&&y%z==0;}
 8 int main(){
 9     int t; scanf("%d",&t);
10     while(t--){
11         long long a,b,x,y; scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
12         long long c=gcd(2*a,2*b);
13         if(check(x,y,c)||check(x+a,y+b,c)||check(x+b,y+a,c)||check(x+a+b,y+a+b,c))puts("Y");else puts("N");
14     }
15     return 0;
16 }

 

20160418

posted @ 2016-07-24 20:05  YuanZiming  阅读(246)  评论(0编辑  收藏  举报