import java.util.*;
public class Main{
public static class Node{//点类
int x;//横坐标
int y;//纵坐标
char kind;//类型
public Node(int x,int y,char kind){
this.x=x;
this.y=y;
this.kind=kind;
}
}
public static void main(String[] args){
ArrayList<Node> nodes1=new ArrayList<Node>();//A类点
ArrayList<Node> nodes2=new ArrayList<Node>();//B类点
Scanner s= new Scanner(System.in);
String str=s.nextLine();
String[] strs=str.split(" ");
int m= Integer.parseInt(strs[0]);//获得点的个数
int n= Integer.parseInt(strs[1]);//获得线的个数
int i=0;
while(i<m)//输入点
{
String[] strs1=s.nextLine().split(" ");
int x=Integer.parseInt(strs1[0]);//横坐标
int y=Integer.parseInt(strs1[1]);//纵坐标
char kind=strs1[2].charAt(0);//类型
Node node=new Node(x,y,kind);
if(kind=='A')//如果是A类点
nodes1.add(node);
else
nodes2.add(node);
i=i+1;
}
i=0;
int flag1=0;
int flag2=0;
while(i<n)//输入边
{
boolean right=true;
String[] strs2=s.nextLine().split(" ");
int a=Integer.parseInt(strs2[0]);
int b= Integer.parseInt(strs2[1]);
int c=Integer.parseInt(strs2[2]);
Node node1=nodes1.get(0);
Node node2=nodes2.get(0);
if(a+node1.x*b+node1.y*c>0)//A类第一个点在哪一侧
flag1=1;
else
flag1=-1;
if(a+node2.x*b+node2.y*c>0)//B类第一个点在哪一侧
flag2=1;
else
flag2=-1;
System.out.println("flag1 ="+ flag1);
System.out.println("flag2 ="+ flag2);
if(flag1==flag2)//如果在同一侧
{
System.out.println("No");
i+=1;
continue;
}
int ans=0;
for(int j=1;j<nodes1.size();j++)//A类点
{
ans=a+b*nodes1.get(j).x+c*nodes1.get(j).y;
if((ans>0&&flag1==-1)||(ans<0 && flag1==1)){
right=false;
break;
}
}
// System.out.println(right);
if(right==false)
{
System.out.println("No");
i+=1;
continue;
}
for(int j=1;j<nodes2.size();j++)//B类点
{
ans=a+b*nodes2.get(j).x+c*nodes2.get(j).y;
if((ans>0&&flag2==-1)||(ans<0 && flag2==1)){
right=false;
break;
}
}
// System.out.println(right);
if(right==false)
System.out.println("No");
else
System.out.println("Yes");
i+=1;
}
}
}
CCF-线性分类器
最新推荐文章于 2023-03-10 21:35:26 发布