WisKey的眼神
Time Limit: 1000/1000 MS
(Java/Others) Memory Limit: 32768/32768 K
(Java/Others)
Total Submission(s): 2059 Accepted
Submission(s): 625
Problem Description
WisKey的眼镜有500多度,所以眼神不大好,而且他有个习惯,就是走路喜欢看着地(不是为了拣钱哦^_^),所以大家下次碰见他的时候最好主动打下招呼,呵呵.
但是Rabbit总是喜欢扮神秘,一天WisKey去食堂排队等着买饭,突然收到一道短消息,是Rabbit发的,”呵呵,又看见你了,你没看到我吧”.WisKey马上拉长脖子扫描食堂,可是就是看不到,再发短信问Rabbit在哪,Rabbit回信曰”我已经在寝室了”.WisKey无语....
假设食堂是个正方形,食堂中心坐标为(0,0),长度为2*L,
WisKey保证在食堂内.
因为是吃饭高峰期,所以每个点上都站着人,当某些人处在同一直线上时就有可能被前面的人挡住.
聪明的ACMer请你帮帮WisKey,告诉他能不能看见Rabbit.
Input
输入L,sx,sy,px,py;
L<=1000,sx,sy是WisKey的坐标,px,py是Rabbit的坐标.
以L=0为结束.
Output
对于每组输入数据,能看见输出”Yes”,看不见输出”No”.
Rabbit不在食堂输出”Out Of
Range”.
Sample Input
5 0 0 1 1
5 0 0 2 0
5 0 0 6 6
5 0 0 -1 -1
0
Sample Output
Yes
No
Out Of Range
Yes
Source
Recommend
lcy | We have
carefully selected several similar problems for you: 1557 1230 1591 1584 1279
最后知道真相的我眼泪掉下来...
简单数学几何题:
方法1: 遍历两点间的点,判断是否存在整数点。(这种搞了挺久..发现很难写对..最后看Ice_crazy的)
方法2:做一个直角三角形,两直角边的最大公约数不唯一则存在整数点。
有个小疑问,为什么5 0 0 1 0 要输出No呢,不是挡不到吗
1 //218MS 204K 855B G++
2 #include<stdio.h>
3 int abs(int a)
4 {
5 return a<0?-a:a;
6 }
7 int main(void)
8 {
9 int l,x1,x2,y1,y2;
10 while(scanf("%d",&l)!=EOF && l)
11 {
12 scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
13 if(abs(x2)>l || abs(y2)>l){
14 puts("Out Of Range");continue;
15 }
16 if(x1==x2 || y1==y2){
17 puts("No");continue;
18 }
19 int c1=(y2-y1)*x1;
20 int c2=(x2-x1)*y1;
21
22 int ln=x1>x2?x2:x1;
23 int rn=x1>x2?x1:x2;
24 int flag=1;
25 for(int i=ln+1;i<rn;i++){
26 double y=(((y2-y1)*i-c1+c2)*1.0/(x2-x1));
27 if((int)y==y){
28 flag=0;break;
29 }
30 }
31 if(flag) puts("Yes");
32 else puts("No");
33 }
34 return 0;
35 }
36
37 /*
38 5 0 0 1 1
39 5 0 0 2 0
40 5 0 0 6 6
41 5 0 0 -1 -1
42
43 5 0 0 0 2
44 5 0 0 1 0
45 5 0 0 0 1
46 */
1 #include<stdio.h>
2 int gcd(int a,int b)
3 {
4 if(a%b==0) return b;
5 else return gcd(b,a%b);
6
7 }
8 int abs(int a)
9 {
10 return a<0?-a:a;
11 }
12 int main(void)
13 {
14 int l,x1,x2,y1,y2;
15 while(scanf("%d",&l),l)
16 {
17 scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
18 if(abs(x2)>l || abs(y2)>l){
19 puts("Out Of Range");continue;
20 }
21 if(x1==x2 || y1==y2){
22 puts("No");continue;
23 }
24 int a=abs(x1-x2);
25 int b=abs(y1-y2);
26 if(a<b){
27 int temp=a;a=b;b=temp;
28 }
29 if(gcd(a,b)==1) puts("Yes");
30 else puts("No");
31 }
32 return 0;
33 }
hdu 1577 WisKey的眼神 (数学几何),布布扣,bubuko.com