CCF CSP202006-1线性分类器
#include<iostream>
#include<vector>
using namespace std;
const int maxn = 1010;
struct Point{
int x,y;
}point;
vector<Point>A,B;
int main(){
int n,m;
cin>>n>>m;
for(int i = 0; i < n; i++){
char c;
cin>>point.x>>point.y>>c;
if(c == 'A'){
A.push_back(point);
}
else if(c == 'B'){
B.push_back(point);
}
}
for(int j = 0; j < m; j++){
int a,b,c;
bool bflag1,bflag2,eflag1,eflag2,ans = true;
cin>>a>>b>>c;
for(int i = 0; i < A.size(); i++){
long long num = a + A[i].x * b + A[i].y * c;
if(i == 0){
if(num < 0) bflag1 = false;
else bflag1 = true;
}
else{
if(num < 0) eflag1 = false;
else eflag1 = true;
if(bflag1 != eflag1){
ans = false;
break;
}
}
}
if(ans){
for(int i = 0; i < B.size(); i++){
long long num = a + B[i].x * b + B[i].y * c;
if(i == 0){
if(num < 0) bflag2 = false;
else bflag2 = true;
}
else{
if(num < 0) eflag2 = false;
else eflag2 = true;
if(bflag2 != eflag2){
ans = false;
break;
}
}
}
}
if(ans){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}