CSP 202006-1 線性分類器python實現
阿新 • • 發佈:2020-08-29
思路
這題問題是對於這一群點和一條直線,我們也不知道直線上方的是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")