逃避系统警察
【題目背景】
由于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.
轉載于:https://www.cnblogs.com/YYC-0304/p/9500107.html
總結
- 上一篇: 侦察兵
- 下一篇: COGS-257-动态排名系统-树状数组