【题目背景】
由于GJY在与神犇的世纪大战中输了,现在她必须躲避系统警察对她的追捕,不然她一辈子都不可以与神犇交朋友了。
【题目描述】
GJY躲藏到了一个茂密的森林里,森林里是一个m*n的矩阵,里面有m*n棵树,也就是说在每一整数位置上都有一棵树,水平或垂直相邻的两棵树的距离为1。而GJY就在某一个果树下面。
系统警察可是会爬树的,他带着他的电子网爬上了某一棵树,准备来抓捕GJY。如果警察和GJY之间没有其他的树,那么警察就会看到GJY,就会对她实施抓捕。现在聪明的我们已经知道了警察和GJY的位置,要求你编写一个程序来判断警察是否可以抓到GJY。
【输入格式】
第一行为n,表示一共有n组数据,每组数据的第一行为两个正整数ax和ay,表示系统警察的位置,每组数据的第二行为两个正整数bx和by,表示GJY所在的位置。
【输出格式】
一共有n行,如果可以抓到GJY输出“yes”,否则输出“no”。
【输入样例】
1
1 1
1 2
【输出样例】
no
【数据范围】
对于100%的数据,n≤100000,1≤ax,ay,bx,by≤100000000.
分析
这题就是求在一个点阵内,两点连成一条直线,直线上是否有其他点,若有则输出no,否则输出yes
这题有一个公式:在一个点阵内,若abs(ax-bx)和abs(ay-by)有一个公约数,则两点相连,直线上就会有其他点。
程序:
var
n,i:longint;
ax,bx,ay,by,x,y:int64;
function f(x,y:longint):longint;
begin
if y<>0 then exit(f(y,x mod y)) else exit(x);
end;
begin
readln(n);
for i:=1 to n do
begin
readln(ax,ay);
readln(bx,by);
x:=abs(ax-bx);
y:=abs(ay-by);
if f(x,y)=1 then writeln('yes') else writeln('no');
end;
end.