题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1577
题意:给出两个人的坐标,问一个是否能看到另一个人;
思路:若能看到另一个人的话,这两个点之间没有整数点。即三角形两直角边边长的最大公约数为1;
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
using namespace std;
int gcd(int x,int y){
while(x%y!=0){
int t=x;
x=y;
y=t%y;
}
return y;
}
int main(){
freopen("input.txt","r",stdin);
int L,sx,sy,px,py,a,b;
while(cin>>L){
// printf("debug\n");
if(L==0) return 0;
cin>>sx>>sy>>px>>py;
// printf("%d %d %d %d %d\n",L,sx,sy,px,py);
// printf("a=%d b=%d\n",abs(px-sx),abs(py-sy));
if(abs(px)>L || abs(py)>L){
printf("Out Of Range\n");
continue;
}
a=abs(sx-px);
b=abs(sy-py);
if(a<b){
int t=a;
a=b;
b=t;
}
if(a==b){
if(a==1){
printf("Yes\n");
}else{
printf("No\n");
}
}
else if(b==0){
if(a==1) printf("Yes\n");
else printf("No\n");
}
else{
// printf("gcd=%d\n",gcd(a,b));
if(gcd(a,b)==1)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}