python实现代码
#线性分类器
#n:点的个数;m:需要查询的直线的个数
n, m = map(int, input("请输入点和直线的个数:").split())
List = [] #用二维列表存储点
#输入n个点的信息['xi', 'yi', 'typei']
for i in range(n):
alist = input("请输入n个点的信息:").split()
List.append(alist) #字符串二维列表
sucs = [] #存储直线成功与否的标志
#检查m条直线
for j in range(m):
suc = 1 #成功与否的标志:1表示成功分离,0表示不成功
flagA = -1 #A类点的标志
flagB = -1
b0, b1, b2 = map(int, input("请输入直线的参数:").split()) #直线的三个参数
for i in range(n):
#当点位于直线上方t=1,下方t=0
t = 1 if (b0 + b1 * int(List[i][0]) + b2 * int(List[i][1]) > 0) else 0
if List[i][2] == 'A': #A类点集
if flagA == -1:
flagA = t #用A类点的第一个点来确定A类点是位于直线上方还是下方
elif t != flagA: #位于两侧
suc = 0
break
if List[i][2] == 'B': #B类点集
if flagB == -1:
flagB = t # 用A类点的第一个点来确定A类点是位于直线上方还是下方
elif t != flagB: # 位于两侧
suc = 0
break
#检查A,B类点是否位于直线两侧
if flagA == flagB:
suc = 0
sucs.append(suc)
for j in range(m):
print("Yes") if sucs[j] == 1 else print("N0")