问题描述
试题编号: 202006-1
试题名称: 线性分类器
时间限制: 1.0s
内存限制: 512.0MB
样例1
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
AC
#include<bits/stdc++.h>
using namespace std;
struct node {
int x;
int y;
char type;
};
int main() {
int n,m;
cin>>n>>m;
node a[n];
for(int i=0; i<n; i++) {
cin>>a[i].x>>a[i].y>>a[i].type;
}
while(m--) {
int cnt=1;
int flag;
//0表示标记A的点在下方 1表示标记A的点在上方
int s1,s2,s3;
cin>>s1>>s2>>s3;
int q=s1+s2*a[0].x+s3*a[0].y;
if(q<0) {
if(a[0].type=='A')
flag=0;
else if(a[0].type=='B')
flag=1;
} else if(q>0) {
if(a[0].type=='A')
flag=1;
else if(a[0].type=='B')
flag=0;
}
//以上均在设置标记
for(int i=1; i<n; i++) {
if(s1+s2*a[i].x+s3*a[i].y<0) {
if(a[i].type=='B'&&flag==0||a[i].type=='A'&&flag==1) {
cnt=0;
cout<<"No"<<endl;
break;
}
} else if(s1+s2*a[i].x+s3*a[i].y>0) {
if(a[i].type=='A'&&flag==0||a[i].type=='B'&&flag==1) {
cnt=0;
cout<<"No"<<endl;
break;
}
}
}
if(cnt)
cout<<"Yes"<<endl;
}
return 0;
}