问题描述:就是判断给定的直线能否将A,B俩类点分开
思路:一条直线可以将俩类点分开说明其中有一类点在这条直线的上方并且另一类点在这条直线的下方。点在直线上方就是将该点坐标代入直线方程大于0,在下方就是小于0,这道题我们只需要分别记录A和B类的点在直线一方(我用的上方)的数量就行因为如果A在上方的数量等于A类点的数量并且B在直线上方的数量为0则说明该直线可以将A,B分隔开。
n,m = map(int,input().split())
numsA = [] # 存放A类的点
numsB = [] # 存放B类的点
lines = [] # 存放直线
result = [] # 存放结果
for i in range(n):
temp = list(input().split())
# A和B类点分开存放
if temp[2] == 'A':
numsA.append(temp)
else:
numsB.append(temp)
for i in range(m):
temp = list(map(int,input().split()))
lines.append(temp)
for templ in lines:
sumA = 0
sumB = 0
# 只记录在直线上方的点的数量
for tempA in numsA:
s = templ[0]+int(tempA[0])*templ[1]+int(tempA[1])*templ[2]
if s>0:
sumA += 1
for tempB in numsB:
s = templ[0]+int(tempB[0])*templ[1]+int(tempB[1])*templ[2]
if s>0:
sumB += 1
# 如果A类中在直线上方的点的数量为A类点的个数并且B类在直线上方的点的数量为0
# 或者B类中在直线上方的点的数量为A类点的个数并且A类在直线上方的点的数量为0
if (sumA == len(numsA) and sumB == 0) or (sumB == len(numsB) and sumA==0):
result.append('Yes')
else:
result.append('No')
for j in result:
print(j)