[CCF-CSP]2020-06-1线性分类器
#include<iostream>
using namespace std;
struct node{
int x;
int y;
char type;
};
int main(){
int n,m;
cin>>n>>m;
node node[1000];
int sum_a=0,sum_b=0;
for(int i=1;i<=n;i++){
cin>>node[i].x>>node[i].y>>node[i].type;
if(node[i].type=='A'){
sum_a++;
}
if(node[i].type=='B'){
sum_b++;
}
}
for(int i=1;i<=m;i++){
int temp1,temp2,temp3;
cin>>temp1>>temp2>>temp3;
//注意放在循环里 归零
int count_a1=0;//记录A大于0的数
int count_b1=0;//记录B大于0的数
int count_a0=0;//记录A小于0的数
int count_b0=0;//记录B小于0的数
for(int j=1;j<=n;j++){
if((temp1+temp2*node[j].x+temp3*node[j].y)>0){
if(node[j].type=='A'){
count_a1++;
}else{
count_b1++;
}
}
if((temp1+temp2*node[j].x+temp3*node[j].y)<0){
if(node[j].type=='A'){
count_a0++;
}else{
count_b0++;
}
}
}
//判断条件
//若出现在直线一侧且为A类型的个数等于A类点的个数 并且 出现在另一侧且为B类型的个数等于B类点的个数
//或者
//若出现在直线一侧且为A类型的个数等于另一侧B类点的个数 并且 出现在另一侧为B类型的个数等于另一侧A类型的个数
if((count_a1==sum_a&&count_b0==sum_b)||(count_a0==sum_a&&count_b1==sum_b)){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}