P1170 兔八哥与猎人
普及-都不会做,我退役吧。。。
这道题给你直角坐标系上的两个点,问你他们是否能够互相看见而不被其他的点挡到。
这道题很坑,我真的以为就是判断左右八个点,结果爆零。
其实斜斜的看也能观察到。题解里面说了。
两个点之间要不被看到,是不是前面一定要有点挡着你?
那么你只要不是路径上的第一个点就可以了。
第一个点满足什么条件?
横纵坐标之差互质!很好理解。
所以跑一下gcd就可以了。
代码:
#include<cstdio>
int x1, x2, y1, y2;
int gcd(int x, int y)
{
if(y == 0) return x;
return gcd(y, x % y);
}
int abs(int x)
{
if(x < 0) return -x;
return x;
}
int main()
{
int T; scanf("%d", &T);
while(T--)
{
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
if(gcd(abs(x1 - x2), abs(y1 - y2)) == 1) printf("no\n");
else printf("yes\n");
}
return 0;
}