水题,题意是给定目标网格,以及向上下左右一次能移动的格子数,问不限移动次数的情况下,是否可以移动到目标位置。

不难发现向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;
}

https://www.nowcoder.com/discuss/727521113110073344