前往
大廳
主題

ZeroJudge - f338: 后羿射日(Archer) 解題心得

Not In My Back Yard | 2020-11-18 20:55:53 | 巴幣 2 | 人氣 278

題目連結:


題目大意:
輸入第一列給定四個整數 x0 、 y0 、 L0 、 R (-1000 ≦ x0 、 y0 ≦ 1000 , 1 ≦ L0 ≦ 5 , 0 ≦ R ≦ 3000),依序代表后羿的 x 、 y 座標、等級以及射程。

接著的第二列輸入給定一正整數 N (1 ≦ N ≦ 10),代表有 N 顆太陽。接著有 N 列,每列給定三整數 x 、 y 、 L ,代表其中一顆太陽的 x 、 y 座標以及等級。

已知后羿只能射下等級沒有超過他且在射程範圍之內的太陽。試問后羿可以射下幾顆太陽?



範例輸入:
範例輸入 #1
0 0 2 1000
1
500 0 4

範例輸入 #2
10 10 5 50
3
20 10 1
-100 50 2
0 0 3

範例輸入 #3
100 60 1 100
5
100 100 1
500 60 1
50 -20 1
200 60 1
120 70 3


範例輸出:
範例輸出 #1
0

範例輸出 #2
2

範例輸出 #3
3


解題思維:
單純的條件判斷之題型。

先檢查每顆太陽的等級有沒有超過后羿的,如果有就跳過這顆繼續判斷下一顆。接著就是判斷后羿以及太陽之間的距離,即判斷下式是否成立
sqrt((x0 - x) ^ 2 + (y0 - y) ^ 2) ≦ R
其中 sqrt() 代表取平方根。但是因為為了避免浮點數誤差,所以我們將兩邊平方變為
(x0 - x) ^ 2 + (y0 - y) ^ 2 ≦ R ^ 2
只要符合前面的等級之判斷以及上式就將計數器 + 1(計數器用來計算可以射下的太陽之數量,初始化之值為 0)。

最後輸出計數器之值即是所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作