CSP 202006-1 线性分类器(100)
思路:先记录每一个点,再输入线,每次输入线后,对所有的点进行遍历,计算在该线下该每个点的纵坐标值,若>改点的纵坐标则在下侧,否者在上册。
#include"bits/stdc++.h"
using namespace std;
struct Point{
int x,y;
char type[2];
}point[1006];
int n,m,a,b,c;
char part[]={' ',' '};
int main(){
scanf("%d%d",&n,&m);
for(int i = 0;i<n;i++)
scanf("%d%d%s",&point[i].x,&point[i].y,point[i].type);
for(int i = 0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
bool f = true;
part[0]=part[1]=' ';
for(int j = 0;j<n;j++){
if((-a-b*point[j].x)*1.0/c>point[j].y){
if(part[0]!=' '&&part[0]!=point[j].type[0]){
f = false;
break;
}
part[0]=point[j].type[0];
}
else{
if(part[1]!=' '&&part[1]!=point[j].type[0]){
f = false;
break;
}
part[1]=point[j].type[0];
}
}
printf(f?"Yes\n":"No\n");
}
return 0;
}