就是求一个点在三角形的边上还是在点上还是在内部或者外部。
一开始用叉积判断这个点个三条边的叉积之和是不是递增的,然后中间就不知道为什么被卡掉了一个案例。想了半天感觉思路也没有问题啊,可能是有一个点非常的接近线,他就可以让你计算的temp逼近于0当小于那个eps的时候就会存在一定的问题。
然后打了两个补丁过了题。总感觉不太对
最后改了代码是直接数叉积的正值数和负值数过的题
顺便提一句 scanf yyds
// god with me
//#pragma GCC optimize(1)
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#include <cmath>
#include <math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define inf 0x7fffffff
#define ll long long
//#define int unsigned long long
#define int long long
//#define double long double
//#define double long long
#define re int
//#define i int i
//#define void inline void
#define eps 1e-10
//#define mod 1e9+7
#define ls(p) p<<1
#define rs(p) p<<1|1
#define pi acos(-1.0)
#define pb push_back
#define mk make_pair
#define P pair < int , int >
// typedef long long s64;
using namespace std;
const int mod=1e6+7;
const int N=1e3+5;//?????????? 4e8
const int M=1e5+10;
const int maxn=32005;
double x[3],y[3];
double xmult(double x1,double y1,double x2,double y2,double x0,double y0)
{
return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);
}
void solve()
{
for(int i=0;i<3;i++)scanf("(%lf,%lf)\n",&x[i],&y[i]);
double ans=0;
double nx,ny;
scanf("(%lf,%lf)",&nx,&ny);
for(int i=0;i<3;i++)
{
if(nx==x[i]&&ny==y[i])
{
cout<<4<<endl;
return;
}
}
int temp3=0,temp2=0;
for(int i=0;i<=2;i++)
{
int a=i,b=(i+1)%3;
double temp1=xmult(x[a],y[a],x[b],y[b],nx,ny);
if(temp1>0)temp3++;
else if(temp1<0)temp2++;
}
if(temp3==3||temp2==3)cout<<1<<endl;
else if(temp3>0&&temp2>0)cout<<2<<endl;
else if((temp3+temp2)==1)cout<<4<<endl;
else cout<<3<<endl;
}
signed main()
{
// ios::sync_with_stdio(false);
int T=1;
// cin>>T;
for(int index=1;index<=T;index++)
{
solve();
}
return 0;
}