zhangwch • 1个月前
#include <iostream>
#include <cmath>
using namespace std;
// 被树遮挡,意味着两点的连线经过整点
// 同时意味着,以人和熊组成的矩形,可以【按某个比例缩小后,四个点依然为整点】
// 同时意味着,长和宽有公约数,这样才能缩小
// 所以其实就是gcd
int gcd(int x, int y) {
if (y == 0) return x;
return gcd(y, x % y);
}
int main() {
int n;
cin >> n;
while (n--) {
int x1, x2, y1, y2;
cin >> x1 >> y1 >> x2 >> y2;
int d1 = abs(x1 - x2), d2 = abs(y1 - y2);
// 还要考虑人和熊在一条水平线或垂直线上的情况
// 还要考虑人和熊在一棵树下的情况(七步之内,熊快)
if (d1 == 0 || d2 == 0) {
if (d1 + d2 == 0) cout << "yes" << endl;
else if (d1 + d2 <= 1) cout << "no" << endl;
else cout << "yes" << endl;
continue;
}
if (gcd(d1, d2) == 1) cout << "no" << endl;
else cout << "yes" << endl;
}
return 0;
}
Comments: