Problem
給一個用 ASCII Area 拉出來的簡單多邊形,求其面積為何?
Sample Input
|
|
Sample Output
|
|
Solution
看別人的代碼相當簡單,只是有點不知道它們怎麼構思的。
首先,保證每一個端點都是格子點,靈機一動想到 Pick’s theorem,$A = i + b/2 - 1$,那麼接著就是找到 i 的個數 (內部存在的整數節點個數),b 個數 (邊上的整數節點個數)。
b 很好求得,相當於 \
和 /
的個數而已,然而 i 求法會比較特別一點,思路類似於掃描線的方式,性質則是利用射線法 (一個點拉一個射線無限延伸,如果該點在簡單多邊形內,則會穿過奇數個點。)。
如果是凸多邊形,也許就能用行列式求值。
|
|