https://www.luogu.org/problem/P1170

#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],n;
int main() {
    cin>>n;
    for(int i=1; i<=n; i++) {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a==c||b==d) //特判,排除兔和人在同行或同列的情况,防止__gcd函数出错
            if(abs(a-c)+abs(b-d)<=1)  cout<<"no"<<endl; //在同行或同列的情况下,若距离小于等于1则不安全
            else cout<<"yes"<<endl;//否则兔子和猎人间至少有一棵树,兔子是安全的
        else if(__gcd(abs(a-c),abs(b-d))==1) cout<<"no"<<endl;//判断两点之间的纵坐标之差与横坐标之差是否互质,互质则两点间没有树
        else cout<<"yes"<<endl;//反之人兔间至少有一棵树
    }
    return 0;
}
//在这里把人的坐标设为了原点,然后判断兔子坐标是否互质,如果互质,则与兔子与人之间没有别的点,也就是会被看到 
01-21 18:17