#include <iostream>
using namespace std;
/*
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
*/
struct Loc
{
long long x;
long long y;
};
struct Loc a[10000],b[10000];
int main()
{
int n,m;
cin>>n>>m;
int la=0,lb=0;
long long x0,y0;
char type;
long long c0,c1,c2;
for(int i=0; i<n; i++)
{
cin>>x0>>y0>>type;
if(type=='A')
{
a[la].x=x0;
a[la++].y=y0;
}
else
{
b[lb].x=x0;
b[lb++].y=y0;
}
}
while(m>0)
{
m--;
int flag1=0,flag2=0;
int flag3=0;//防止在同一侧
cin>>c0>>c1>>c2;
if(a[0].y*c2+a[0].x*c1+c0>0)
{
flag3=0;
for(int i=1; i<la; i++)
{
if(a[i].y*c2+a[i].x*c1+c0<0){
flag1=1;
break;
}
}
}
else
{
flag3=1;
for(int i=1; i<la; i++)
{
// cout<<-(a[i].x*c1+c0)/c2<<" "<<a[i].y<<endl;
if(a[i].y*c2+a[i].x*c1+c0>0){
flag1=1;break;
}
}
}
if(flag1==1)
{
cout<<"No"<<endl;
continue;
}
if(b[0].y*c2+b[0].x*c1+c0>0)
{
if(flag3==0)//防止在同一侧
{
cout<<"No"<<endl;
continue;
}
for(int i=1; i<lb; i++)
{
// cout<<-(b[i].x*c1+c0)/c2<<" "<<b[i].y<<endl;
if(b[i].y*c2+b[i].x*c1+c0<0){
flag2=1;
break;}
}
}
else
{
if(flag3==1)//防止在同一侧
{{
cout<<"No"<<endl;
continue;
}
}
for(int i=1; i<lb; i++)
{
//cout<<-(b[i].x*c1+c0)/c2<<" "<<b[i].y<<endl;
if(b[i].y*c2+b[i].x*c1+c0>0)
flag2=1;
}
}
if(flag2==1)
{
cout<<"No"<<endl;
continue;
}
if(flag1==0&&flag2==0)
{
cout<<"Yes"<<endl;
}
}
return 0;
}
CCF CSP 线性分类器(C++)
最新推荐文章于 2024-04-21 13:42:40 发布