C++解题答案:
#include<iostream>
using namespace std;
struct point
{
int x;
int y;
char lei;
};
bool isok(point points[],int n,int a,int b,int c)
{
int manzu1=0;
int manzu2=0;
int manzu3=0;
int manzu4=0;
for(int i=0;i<n;i++)
{
// A点在直线上,B点在直线下
if(a+b*points[i].x+c*points[i].y>0&&points[i].lei=='A')
manzu1++;
if(a+b*points[i].x+c*points[i].y<0&&points[i].lei=='B')
manzu1+=1;
//A点在直线下,B点在直线上
if (a+b*points[i].x+c*points[i].y>0&&points[i].lei=='B')
manzu2++;
if(a+b*points[i].x+c*points[i].y<0&&points[i].lei=='A')
manzu2++;
}
if(manzu1==n||manzu2==n)//所有的点都满足情况返回正确
return true;
else return false;
}
int main()
{
int n,m;
cin>>n>>m;
point points[n];
for(int i=0;i<n;i++)
{
cin>>points[i].x>>points[i].y>>points[i].lei;
}
int a,b,c;//a,b,c分别表示sita0,1,2
for(int i=0;i<m;i++)
{
cin>>a>>b>>c;
if(isok(points,n,a,b,c))
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
/*
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
*/