hdu 1577 WisKey的眼神 (数学几何)

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

时间: 2024-10-08 10:08:59

hdu 1577 WisKey的眼神 (数学几何)的相关文章

hdu 1115 Lifting the Stone (数学几何)

Lifting the Stone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5203    Accepted Submission(s): 2155 Problem Description There are many secret openings in the floor which are covered by a big

HDU 4405 飞行棋上的数学期望

突然发现每次出现有关数学期望的题目都不会做,就只能找些虽然水但自己还是做不出的算数学期望的水题练练手了 题目大意: 从起点0点开始到达点n,通过每次掷色子前进,可扔出1,2,3,4,5,6这6种情况,扔到几前进几,当然对应飞行通道可以通过x直达一点y,x<y,计算到达n点或超过n 点要扔色子的次数的数学期望 从某一点 i 扔完色子可到达 i+1,i+2,i+3,i+4,i+5,i+6这6个点,令dp[i]为到达末尾的数学期望 那么到达之后6个点的数学期望是一样的,那么dp[i]=dp[i+1]*

hdu 4869 Turn the pokers(数学)

题目链接:hdu 4869 Turn the pokers 题目大意:给定n和m,表示有n次翻牌的机会,m张牌,一开始所有的牌均背面朝上,每次翻牌可以选择xi张牌同时翻转.问说最后有多少种能. 解题思路:只要确定最后正面朝上的牌的个数即可.所以在读入xi的时候维护上下限即可. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long l

HDU 4569 Special equations(数学推论)

题目 //想不出来,看了解题报告 /* 题意:给你一个最高幂为4的一元多项式,让你求出一个x使其结果模p*p为0. 题解:f(x)%(p*p)=0那么一定有f(x)%p=0,f(x)%p=0那么一定有f(x+p)%p=0. 所以我们可以开始从0到p枚举x,当f(x)%p=0,然后再从x到p*p枚举,不过每次都是+p,找到了输出即可,没有的话No solution! */ #include<stdio.h> int main() { int t,n; __int64 a[5],p; scanf(

HDU 1019 Least Common Multiple 数学题解

求一组数据的最小公倍数. 先求公约数在求公倍数,利用公倍数,连续求所有数的公倍数就可以了. #include <stdio.h> int GCD(int a, int b) { return b? GCD(b, a%b) : a; } inline int LCM(int a, int b) { return a / GCD(a, b) * b; } int main() { int T, m, a, b; scanf("%d", &T); while (T--)

WisKey的眼神

WisKey的眼神 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 164 Accepted Submission(s): 82   Problem Description WisKey的眼镜有500多度,所以眼神不大好,而且他有个习惯,就是走路喜欢看着地(不是为了拣钱哦^_^),所以大家下次碰见他的时候最好主动打下招呼,呵呵.但是Rabbi

hdu 1700 Points on Cycle 水几何

已知圆心(0,0)圆周上的一点,求圆周上另外两点使得三点构成等边三角形. 懒得推公式,直接用模板2圆(r1=dist,r2=sqrt(3)*dist)相交水过 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<iterator> using namespace std; #define eps 1e-6 typedef long lon

hdu 4720 Naive and Silly Muggles(几何)

题目链接:hdu 4720 Naive and Silly Muggles 题目大意:给出三点,找出一个圆,要求面积尽量小,并且三点必须在园内,如果可以找到一个圆,使得说第4个点不在圆内则是安全的. 解题思路:面积最小即三个点外切圆,根据三角形两条边的垂直平分线求出圆心.判断第4个点是否在圆内只要计算距离即可. 然后还要考虑说面积和外切圆相同,但是圆心不同的圆. #include <cstdio> #include <cstring> #include <cmath>

多校-HDU 5351 MZL&#39;s Border 数学

f[1] = 'b', f[2] = 'a', f[i] = f[i - 1] + f[i - 2] 斐波那契数列的字符串,给你n和m,前m位中,最长的前缀等于后缀的长度是多少.1≤n≤1000, 1≤m≤length(f[n]) 规律题,虽然我不知道为什么. 1 import java.io.*; 2 import java.util.*; 3 import java.math.*; 4 public class Main{ 5 //Scanner cin = Scanner(System.i