#include<iostream>
using namespace std;
const int MAX_Point = 1000;
const int MAX_Line = 20;
//点
struct Point{
int x;//横坐标
int y;//纵坐标
char type;//类型
};
//线
struct Line{
int k0;
int k1;
int k2;
};
Point p[MAX_Point];
Line l[MAX_Line];
bool above(Point &p,Line &l){
int y=l.k0+l.k1*p.x+l.k2*p.y;
if(y>0){
return true;
}
else{
return false;
}
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>p[i].x>>p[i].y>>p[i].type;
}
for(int i=0;i<m;i++){
cin>>l[i].k0>>l[i].k1>>l[i].k2;
}
for(int i=0;i<m;i++){
int count_over,count_less;
count_over=count_less=0;
char over[MAX_Point];
char less[MAX_Point];
for(int j=0;j<n;j++){
if(above(p[j],l[i])==true){
over[count_over++]=p[j].type;
}
else{
less[count_less++]=p[j].type;
}
}
bool flag=true;
for(int j=0;j<count_over;j++){
if(over[j]!=over[0]){
flag=false;
}
}
for(int j=0;j<count_less;j++){
if(less[j]!=less[0]){
flag=false;
}
}
if(flag==true){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}
数据测试:
9 3
1 1 A
1 0 A
1 -1 A
2 2 B
2 3 B
0 1 A
3 1 B
1 3 B
2 0 A
0 2 -3
-3 0 2
-3 1 1