题目要求
解题思路
首先,要判断该题主要考点是点落在线段上方还是下方,这里利用公式(n0+n1x+n2y<0,则落在上方,否则下方)。然后每个线段都对n个点进行判断。
代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m;
struct node{
ll x;
ll y;
char t;
};
struct node a[1010];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].t;
}
ll n0,n1,n2;
for(int i=1;i<=m;i++){
int flag=0;
char flagc='N',flagd='N';
cin>>n0>>n1>>n2;
for(int j=1;j<=n;j++){
if((n0+n1*a[j].x+n2*a[j].y)<0){
if(flagc=='N'){
flagc=a[j].t;continue;
}
if(a[j].t!=flagc){
flag=1;
break;
}
}
else if((n0+n1*a[j].x+n2*a[j].y)>0){
if(flagd=='N'){
flagd=a[j].t;continue;
}
if(a[j].t!=flagd){
flag=1;
break;
}
}
else {
continue;
}
}
if(flag==1){
cout<<"No"<<endl;
}
else {
cout<<"Yes"<<endl;
}
}
return 0;
}