内心里的一把火(计算几何(海伦公式))
链接:https://ac.nowcoder.com/acm/contest/289/D
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
小明在上学的路上,看到了小花,小花也看见了他,两个人深情的对视了一下,然后小花就对小明说:你爱过我吗?小明说:爱过。小花就对小明说,那你能帮我做一个题目吗?如果你能做对的话,就证明你爱过我。小明自信的回答好啊。小花说,给你三个人的坐标,以及小花的坐标,她想知道她是不是处在他们三个人的范围之内。小明顿时慌了,早知道我就不说了,他赶紧找到了acmer来帮他解决了。
输入描述:
多组输入,输入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;
}
作者:李斌
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!