import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static int compute(int a,int b,int c,int x,int y) {
return a+b*x+c*y;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//点的个数
int SpotNum = s.nextInt();
//线的条数
int LineNum = s.nextInt();
//0代表A 1代表B 第四位表示落在直线上面还是下面
int[][] Spot = new int[SpotNum][4];
for(int i=0;i<SpotNum;i++) {
Spot[i][0]=s.nextInt();
Spot[i][1]=s.nextInt();
String str=s.next();
if(str.equals("A")) Spot[i][2]=0;
else Spot[i][2]=1;
}
//读线条 A+Bx+Cy=0
int[][] Line = new int[LineNum][3];
for(int i=0;i<LineNum;i++) {
Line[i][0]=s.nextInt();
Line[i][1]=s.nextInt();
Line[i][2]=s.nextInt();
}
//开始对每根线条进行遍历
for(int i=0;i<LineNum;i++) {
for(int j=0;j<SpotNum;j++) {
if(compute(Line[i][0],Line[i][1],Line[i][2],Spot[j][0],Spot[j][1])>0) {
//在上面
Spot[j][3]=1;
}else Spot[j][3]=0;
}
//判断在上面的是否都是同一个A或B 以及在下面的是否都是同一个A或B
int flag=999;
boolean flag1=true;
for(int j=0;j<SpotNum;j++) {
if(Spot[j][3]==1) {
if(flag==999) flag = Spot[j][2];
else {
if(flag!=Spot[j][2]) {
System.out.println("No");
flag1=false;
break;
}
}
}
}
if(flag1) {
flag=999;
for(int j=0;j<SpotNum;j++) {
if(Spot[j][3]==0) {
if(flag==999) flag = Spot[j][2];
else {
if(flag!=Spot[j][2]) {
System.out.println("No");
flag1=false;
break;
}
}
}
}
}else continue;
if(flag1)System.out.println("Yes");
}
}
}
CCF-CSP 202006-1线性分类器
最新推荐文章于 2024-07-06 01:24:52 发布