CCF-线性分类器-python3

23 篇文章 0 订阅

新增知识点:

        无

'''
n个点
每个点表示为 (xi,yi,ti)
m个直线
每个直线 c+ax+by=0
求给定一条直线,能否正确分类全部的点
'''

finput = input()
n = int(finput.split(' ')[0])
m = int(finput.split(' ')[1])
As = []  # 存放A类点
Bs = []  # 存放B类点
res = []
for i in range(n):
    p = input()
    xi = int(p.split(' ')[0])
    yi = int(p.split(' ')[1])
    ti = p.split(' ')[2]
    if ti == 'A':
        As.append((xi, yi))
    if ti == 'B':
        Bs.append((xi, yi))
for i in range(m):
    l = input()
    c = int(l.split(' ')[0])
    a = int(l.split(' ')[1])
    b = int(l.split(' ')[2])
    isA = True
    preA = c + a * As[0][0] + b * As[0][1]  # 记录第一个点的结果
    for j in range(1, len(As)):
        nowA = c + a * As[j][0] + b * As[j][1]
        if preA > 0 and nowA > 0 or preA < 0 and nowA < 0 or preA == 0 and nowA == 0:
            pass
        else:  # 存在某个点和第一个点结果不同,则不能正确分类,A类剩下的和B类也不用判断了
            isA = False
            res.append('No')
            break

    if isA == True:  # 只有该直线可以全部正确分类A,则判断B类
        isB = True
        preB = c + a * Bs[0][0] + b * Bs[0][1]  # 记录第一个点的结果
        for j in range(1, len(Bs)):
            nowB = c + a * Bs[j][0] + b * Bs[j][1]
            if preB > 0 and nowB > 0 or preB < 0 and nowB < 0 or preB == 0 and nowB == 0:
                pass
            else:  # 存在某个点和第一个点结果不同,则不能正确分类,直接跳出
                isB = False
                res.append('No')
                break
        if isB == True:
            res.append('Yes')
for r in res:
    print(r)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值