逃避系统警察

【题目背景】

由于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.


posted @ 2017-06-05 21:32  银叶草  阅读(212)  评论(0编辑  收藏  举报
Live2D