內心裡的一把火(計算幾何(海倫公式))
阿新 • • 發佈:2019-01-06
連結: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; }