方法:模拟
思路:略
/**
* 202006-1
* 线性分类器
*/
#include <iostream>
using namespace std;
struct Node{
int x;
int y;
char type;
};
struct Xian{
int a;
int b;
int c;
};
struct Node node[1000+5];
struct Xian xian[25];
int n,m;
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
cin>>node[i].x>>node[i].y>>node[i].type;
}
for(int i=1;i<=m;i++){
cin>>xian[i].a>>xian[i].b>>xian[i].c;
}
bool bo=true;
char c=node[1].type;
for(int i=1;i<=m;i++){
int p;//p为1,表示在直线上方;p为2,表示在直线下方
if ((xian[i].a+xian[i].b*node[1].x+xian[i].c*node[1].y)>0){
p=1;
} else{
p=2;
}
int j=2;
while (bo&&j<=n){
if (p==1){
if (((xian[i].a+xian[i].b*node[j].x+xian[i].c*node[j].y)>0&&node[j].type!=c)
||((xian[i].a+xian[i].b*node[j].x+xian[i].c*node[j].y)<0&&node[j].type==c)
){
bo=false;
}
} else{
if (((xian[i].a+xian[i].b*node[j].x+xian[i].c*node[j].y)<0&&node[j].type!=c)
||((xian[i].a+xian[i].b*node[j].x+xian[i].c*node[j].y)>0&&node[j].type==c)
){
bo=false;
}
}
j++;
}
if (bo){
printf("%s\n","Yes");
} else{
printf("%s\n","No");
}
bo= true;
}
return 0;
}
感悟:本题比较简单