水题,题意是给定目标网格,以及向上下左右一次能移动的格子数,问不限移动次数的情况下,是否可以移动到目标位置。
不难发现向y方向移动的步数仅和 gcd (a, b) 有关,x方向同理,因此直接写if判断目标位置x坐标能否被gcd(a, b)整除即可,y坐标同理。
#include<bits/stdc++.h> using i64 = long long; void solve() { int x, y; std::cin >> x >> y; int a, b, c, d; std::cin >> a >> b >> c >> d; std::cout << (std::abs(x) % std::gcd(c, d) == 0 && std::abs(y) % std::gcd(a, b) == 0 ? "YES" : "NO") << "\n"; } int main() { std::cin.tie(nullptr)->sync_with_stdio(false); int t = 1; std::cin >> t; while (t--) solve(); return 0; }