内心里的一把火(计算几何(海伦公式))

链接:https://ac.nowcoder.com/acm/contest/289/D
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

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

如果在三角形的内部,三个的面积一定等于大的,在外面的话一定大于大的面积,因为精度的原因,YES的范围是小于等于大的面积

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>

using namespace std;

int main()
{
	int x1,y1,x2,y2,x3,y3;
	int x,y;
	while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
	{
		cin>>x>>y;
		double a=sqrt(pow(x1-x2,2)+pow(y1-y2,2)); 
	    double b=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
	    double c=sqrt(pow(x1-x3,2)+pow(y1-y3,2));
	    double p=(a+b+c)/2;
	    double a1=sqrt(pow(x1-x,2)+pow(y1-y,2));
	    double b1=sqrt(pow(x2-x,2)+pow(y2-y,2));
	    double c1=sqrt(pow(x3-x,2)+pow(y3-y,2));
//	    cout<<a1<<" "<<b1<<" "<<c1<<endl;
	    
	    double p1=(a+a1+b1)/2;
	    double p2=(b+b1+c1)/2;
	    double p3=(c+a1+c1)/2;
	    double SABC=sqrt(p*(p-a)*(p-b)*(p-c));
	    double SABP=sqrt(p1*(p1-a)*(p1-a1)*(p1-b1));
	    double SBPC=sqrt(p2*(p2-b)*(p2-b1)*(p2-c1));
	    double SAPC=sqrt(p3*(p3-c)*(p3-a1)*(p3-c1));
	   
	    long long int S1=SABC*1000000;
	    long long int S2=SABP*1000000;
	    long long int S3=SBPC*1000000;
	    long long int S4=SAPC*1000000;
	    //cout<<S1<<" "<<S2<<" "<<S3<<" "<<S4<<endl;
	    if(S1>=S2+S3+S4)
	    {
	    	cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}
    }
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lbperfect123/article/details/85275305
今日推荐