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