C++解答
//2020006-1
#include<iostream>
using namespace std;
//结构体
const int N=1000;
struct Point {
int x, y;
} a[N], b[N];
int acnt,bcnt;
int main()
{
int n,m;
cin>>n>>m;
acnt=bcnt=0;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
char c;
cin>>c;
if(c=='A'){
a[acnt].x=x;
a[acnt++].y=y;
}
else{
b[bcnt].x=x;
b[bcnt++].y=y;
}
}
for(int i=1;i<=m;i++){
int t0,t1,t2;
cin>>t0>>t1>>t2;
bool side,ans=true;
if(acnt)
side=t0+a[0].x*t1+a[0].y*t2>0;
else
side=t0+b[0].x*t1+b[0].y+t2>0;
for(int i=1;i<acnt;i++){
if(t0+a[i].x*t1+a[i].y*t2>0!=side){
ans=false;
break;
}
}
if(ans){
for(int i=1;i<bcnt;i++){
if(t0+b[i].x*t1+b[i].y*t2>0==side){
ans=false;
break;
}
}
}
printf(ans?"Yes\n":"No\n");
}
return 0;
}
设置了一个结构体 将A,B两类的点存放在a组结构体和b组结构体中
在检验时使用了side来判定,side为true or false就不需要使用大于小于来多次分类