牛客网-内心里的一把火

129 阅读2分钟

题目描述

 

小明在上学的路上,看到了小花,小花也看见了他,两个人深情的对视了一下,然后小花就对小明说:你爱过我吗?小明说:爱过。小花就对小明说,那你能帮我做一个题目吗?如果你能做对的话,就证明你爱过我。小明自信的回答好啊。小花说,给你三个人的坐标,以及小花的坐标,她想知道她是不是处在他们三个人的范围之内。小明顿时慌了,早知道我就不说了,他赶紧找到了acmer来帮他解决了。

image.png

 

输入描述:

多组输入,输入A,B,C的坐标(x1,y1,x2,y2,x3,y3),以及小花的坐标(x,y)。(范围都是在0到100之内的整数)

输出描述:

是的话就输出YES,否则输出NO

 

示例1

输入

0 0 3 0 0 4
1 1

输出

YES

题目链接:

ac.nowcoder.com/acm/contest…

题意描述:

判断p是否被abc围起来。

解题思路:

求出abc的面积,然后与pab+pac+pbc的面积相比较,如果相等就证明被围起来了,当然已知x1,y1,x2,y2,x3,y3,求面积时需按逆时针方向((x1*y2-x2*y1)+(x2*y3-x3*y2)+(x3*y1-x1*y3))/2.0,如果不知道方向则fabs(((x1*y2-x2*y1)+(x2*y3-x3*y2)+(x3*y1-x1*y3))/2.0)。

程序代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int x1,y1,x2,y2,x3,y3,x,y;
	double sum,sum1,sum2,sum3;
	while(scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x,&y)!=EOF)
	{
		if(x1==x2&&x1==x3)
		{
			printf("NO\n");	
			continue;
		}	
		if(fabs((y2-y1)*1.0/(x2-x1)-(y3-y2)*1.0/(x3-x2))<1e-10)
		{
			printf("NO\n");	
			continue;
		}
			
		sum=fabs(((x1*y2-x2*y1)+(x2*y3-x3*y2)+(x3*y1-x1*y3))/2.0);
		
		sum1=fabs(((x*y2-x2*y)+(x2*y3-x3*y2)+(x3*y-x*y3))/2.0);
		
		sum2=fabs(((x*y1-x1*y)+(x1*y3-x3*y1)+(x3*y-x*y3))/2.0);
		
		sum3=fabs(((x*y1-x1*y)+(x1*y2-x2*y1)+(x2*y-x*y2))/2.0);
		
		if(fabs(sum-(sum1+sum2+sum3))<1e-10)
			printf("YES\n");
		else
			printf("NO\n");			
	}
	return 0;
}