3. 逃避系统警察
(d.pas/cpp/c)
【题目背景】
由于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
【输出样例】
yes
【数据范围】
对于100%的数据,n≤100000,1≤ax,ay,bx,by≤100000000.
var
n,i,x,y,xx,yy:longint;
function chu(x,y:longint):longint;//辗转相除法
var
z:longint;
begin
if y=0 then exit(1);
z:=x mod y;
if z=0 then exit(y)
else exit(chu(y,z));
end;
begin
readln(n);
for i:=1 to n do
begin
readln(x,y);
readln(xx,yy);
if (chu(abs(x-xx),abs(y-yy))<>1) or (x=xx) and (abs(y-yy)>1) or (y=yy) and (abs(x-xx)>1) then writeln('no')//在对角线上没有树时就被抓
else writeln('yes');
end;
end.
本文介绍了一个算法问题,即判断在给定的森林网格中,警察是否能够直接看到并抓捕到隐藏的目标GJY。该问题通过计算两个点之间的最大公约数来解决,以此判断两点间是否存在遮挡。
5万+

被折叠的 条评论
为什么被折叠?



