CSP 202006 1 線性分類器(c語言)

2021-10-23 15:31:02 字數 1719 閱讀 6398

[題目描述]

考慮乙個簡單的二分類問題——將二維平面上的點分為a和b兩類。

訓練資料報含n個點,其中第i個點(1 ≤i≤n)可以表示為乙個三元組(xi,

yi,t

ypei

x_i,y_i,type_i

xi​,yi

​,ty

pei​

),即該點的橫座標、縱座標和類別。

在二維平面上,任意一條直線可以表示為θ0+

θ1x+

θ2y=

0θ_0+θ_1x+θ_2y = 0

θ0​+θ1

​x+θ

2​y=

0的形式,即由θ0、

θ1和θ

2θ_0、θ_1和θ_2

θ0​、θ1

​和θ2

​三個引數確定該直線,且滿足θ0、

θ1

θ_0、θ_1

θ0​、θ1

​不同時為0。

基於這n個已知類別的點,我們想要在平面上找到一條直線作為乙個線性分類器。具體來說,這條線要把訓練資料中的a、b兩類點完美分隔開來,即一側只有a類點、另一側只有b類點。這樣,對於任意乙個的未知類別的點,我們就可以根據它是位於直線的哪一側來**它的類別了。

在本題中我們僅需要處理n個如下查詢:給定一條直線,判斷它是否能將訓練資料中的a、b兩類點完美分開。

[輸入格式]

從標準輸入讀入資料。

輸入共n+m+1行。

第一行包含用空格分隔的兩個正整數n和m,分別表示點和查詢的個數。

第二行到第n+1行依次輸入n個點的資訊。第i+1行(1xi,

yi和t

ypei

x_i,y_i和type_i

xi​,yi

​和ty

pei​

),分別表示第i個點的橫、縱座標和類別,其中座標為整數、類別為乙個大馬英文本母a或b。

第n+2行到第n+m+1行依次輸入m個查詢。第j+n+1行(1≤j≤m)包含用空格分隔的三個整數θ0、

θ1和θ

2θ_0、θ_1和θ_2

θ0​、θ1

​和θ2

​,表示第j個查詢中給定直線的三個引數。

[輸出格式]

輸出到標準輸出。

輸出共m行,每行輸出乙個字串。

第j行(1≤j≤m)輸出的字串對應第j個查詢的結果:如果給定直線可以完美分隔a、b兩類點,則輸出yes;否則輸出 no。

[樣例1輸入]

9 31 1 a

1 0 a

1 -1 a

2 2 b

2 3 b

0 1 a

3 1 b

1 3 b

2 0 a

0 2 -3

-3 0 2

-3 1 1

[樣例輸出]

nono

yes[樣例說明]

[寫法示例]

#include

#include

//用於使用bool型資料

intmain()

for(x =

0; x < m; x++

)scanf

("%d%d%d"

,&j[x][0

],&j[x][1

],&j[x][2

]);//讀入資料

for(x =

0; x < m; x++

)return0;

}

CSP202006 1 線性分類器

題目可以在csp官網中檢視到喲!題目大意是 判斷type a的所有點是否在直線的同一側並且type b的所有點是否在該直線的另一側。我們要做的就是在讀入m個直線的時候就開始判斷。當讀入乙個直線的時候,我們遍歷所有n個點,我們首先用flaga和flagb標記是否出現過type a或type b的點,如...

202006 1 線性分類器 ccf csp

問題描述 我們可以先寫乙個函式用來判斷 目標點在直線的上方還是下方 def judge theta0,theta1,theta2,x,y theta0 theta1 x theta2 y 0 y 1 float theta0 theta1 x theta2 if y y return true 點在...

CCF 202006 1 線性分類器

標籤 相似題目 題目 考慮乙個簡單的二分類問題 將二維平面上的點分為a 和b 兩類。訓練資料報含 n 個點,其中第 i 個點 1 i n 可以表示為乙個三元組 xi xi yiyi typeitypei 即該點的橫座標 縱座標和類別。在二維平面上,任意一條直線可以表示為 0 1x 2y 0 0 1 ...