1. 程式人生 > 實用技巧 >CSP 202006-1 線性分類器python實現

CSP 202006-1 線性分類器python實現

思路

這題問題是對於這一群點和一條直線,我們也不知道直線上方的是A類還是直線下方的是A類。其實對於這個二分類問題,我們也沒必要知道。我們只需要判斷直線每一測的點是不是一類(A類或B類)就可以了。

至於如何判斷這一側的點是不是一類,用一個set就可以了:把這一側的點的自身類別(A或B)全都扔進一個set,如果是同一類,那麼set的大小肯定是1。

進而,如果直線兩側對應的set大小全都是1,那麼就二分類成功了。

程式碼

m, n = [int(i) for i in input().split()]

dict = {}
for i in range(m):
    line = input().split()
    x, y, s = line
    x, y = int(x), int(y)
    dict[(x, y)] = s

for i in range(n):
    aimsA = set()
    aimsB = set()
    line = input().split()
    a, b, c = [int (i) for i in line]
    for k, v in dict.items():
        x, y = k[0], k[1]
        if  a + b * x + c * y > 0:
            aimsA.add(v)
        else:
            aimsB.add(v)
    if len(aimsA) == 1 and len(aimsB) == 1:
        print("Yes")
    else:
        print("No")