202006-1 线性分类器

 

 

 

 

 

 

 

 

 

 

 

 样例一

9 3
1 1 A
1 0 A
1 -1 A
2 2 B
2 3 B
0 1 A
3 1 B
1 3 B
2 0 A
0 2 -3
-3 0 2
-3 1 1

 

 python

 

 

 

n,m=map(int,input().split())
points=[]
for _ in range(n):
    points.append(input().split())#input返回默认是str
#points=[ [i for i in map(int,input().split())] for j in range(n)]#xi,yi,A/B
searchs=[ [i for i in map(int,input().split())] for j in range(m)]#seta 0 1 2 

for seta in searchs:
    res=1
    flag=0
    #先确定AB的分布
    if((points[0][2]=='A' and seta[0]+seta[1]*int(points[0][0])+seta[2]*int(points[0][1])>0)or(points[0][2]=='B'and seta[0]+seta[1]*int(points[0][0])+seta[2]*int(points[0][1])<0)):
        flag=1
    for p in points:
        if flag==1 :
            if ((seta[0]+seta[1]*int(p[0])+seta[2]*int(p[1])>0 and p[2]=='B')or(seta[0]+seta[1]*int(p[0])+seta[2]*int(p[1])<0 and p[2]=='A')):
                res=0
        else:
            if ((seta[0]+seta[1]*int(p[0])+seta[2]*int(p[1])>0 and p[2]=='A')or(seta[0]+seta[1]*int(p[0])+seta[2]*int(p[1])<0 and p[2]=='B')):
                res=0
    if res==0:
        print('No')
    else:
        print('Yes')

    '''    if(points[0][2]=='A'):
        if(seta[0]+seta[1]*points[0][0]+seta[2]*points[0][1]>0):#此时是A》0 B《0
            flag=1
        else:#此时A《0 B》0
    else:#B
        if(seta[0]+seta[1]*points[0][0]+seta[2]*points[0][1]>0):#此时A《0 B》0
        else:#此时是A》0 B《0
            flag=1'''  

 

posted @ 2023-02-24 23:59  吃人不吐葡萄  阅读(5)  评论(0)    收藏  举报