参考自https://blog.csdn.net/Karen_Cassiopeia/article/details/108546577
题目:
想法:注意判断A点是在上还是在下,用第一个点进行判断(这是自己之前没有想出来的)
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int x[n],y[n],a[m],b[m],c[m];
char p[n];
for(int i =0;i<n;i++){
cin>>x[i]>>y[i]>>p[i];
}
for(int i =0;i<m;i++){
cin>>a[i]>>b[i]>>c[i];
}
int count[m];
for(int i =0;i<m;i++){
count[i]=0;
}
//先确定A在上还是在下
int A,B;
for(int i=0;i<m;i++){
if(p[0]=='A'){
if(a[i]+x[0]*b[i]+y[0]*c[i]<0){
A = -1;
B = 1;
}
else{
A = 1;
B = -1;
}
}
else{
if(a[i]+x[0]*b[i]+y[0]*c[i]<0){
A = 1;
B=-1;
}
else{
A = -1;
B = 1;
}
}
for(int j =0;j<n;j++){
if(p[j]=='A'){
if(A*(a[i]+x[j]*b[i]+y[j]*c[i])>0){
count[i]+=1;
}
else{
break;
}
}
else if(p[j]=='B'){
if(B*(a[i]+x[j]*b[i]+y[j]*c[i])>0){
count[i]+=1;
}
else{
break;
}
}
}
}
for(int i =0;i<m;i++){
if(count[i]==n){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}