#include <bits/stdc++.h>
using namespace std;
struct pot{
double x;
double y;
char type;
};
int main(){
int n,m;
cin>>n>>m;
pot pos[10010];
for(int i=1;i<=n;i++){
cin>>pos[i].x>>pos[i].y>>pos[i].type;
}
while(m--){
//c+ax+by=0;
double c,a,b;
cin>>c>>a>>b;
double stdy=0;
int flaga;//标记大于还是小于
int Ard=0;//标记第一个A,作为A的基准
int flagb;
int Brd=0;
int noflag=0;//是否有no输出
for(int i=1;i<=n;i++){
stdy=(c+a*pos[i].x)/((-1)*b);//某个点x值对应分类线的y
if(pos[i].type=='A'){
if(Ard==0){
if(pos[i].y>stdy){
flaga=1;//标记大于,即第一个A的y在分类线之上,以后的A都应如此
Ard=1;
}
else if(pos[i].y<stdy){
flaga=0;//标记小于
Ard=1;
}
}
if(Ard!=0){
if(flaga==1&&pos[i].y<stdy){
cout<<"No"<<endl;
noflag=1;
break;
}
if(flaga==0&&pos[i].y>stdy){
cout<<"No"<<endl;
noflag=1;
break;
}
}
}//------------------------B与A同理 简单复刻一下即可
if(pos[i].type=='B'){
if(Brd==0){
if(pos[i].y>stdy){
flagb=1;//标记大于
Brd=1;
}
else if(pos[i].y<stdy){
flagb=0;//标记小于
Brd=1;
}
}
if(Brd!=0){
if(flagb==1&&pos[i].y<stdy){
cout<<"No"<<endl;
noflag=1;
break;
}
if(flagb==0&&pos[i].y>stdy){
cout<<"No"<<endl;
noflag=1;
break;
}
}
}
}
if(noflag==0)cout<<"Yes"<<endl;
}
}
CCF CSP试题编号: 202006-1试题名称: 线性分类器
于 2024-03-08 10:56:28 首次发布