110 學年度全國資訊學科能力競賽各題詳解

筆者這次也參與了全國賽的驗題,這邊放一份另一位驗題者與筆者提供的詳解。題本的連結在 這裡 ,pC / pE / pH / pI 的時間限制分別為 2.5s / 2.5s / 2.0s / 0.1s,其餘題目皆為 1.0s。另,讀者也能在 這裡 找到與下文基本相同的內容。 A. 髮廊服務優化問題 (barbershop) 有 n 個人一起來店,第 i 個人的服務時間為 ti。每個客人等待時間是前面人 + 自己服務時間總和,求等待時間總和的最小值。例如:三個人服務時間為 2,1,3,若服務順序為 1,2,3 則等待時間總和為 2+(2+1)+(2+1+3)=11。 等價題序:給一個陣列 t:={ti}ni=1,將 t 重新排列使得 nt1+(n−1)t2+(n−2)t3+…+tn 最小。由上式不難得知,順序越前面被乘的係數就越大,所以可以貪心地將數字從小排到大。複雜度 O(nlogn)。 B. 校園公車 (bus) 給定由 n 條線段組成的折線 P:={¯PiPi+1}ni=1 與一點 O,問 O 到 P 的最短距離。 先考慮這個問題:給定一線段 ¯PQ 與一點 O,求 O 到 ¯PQ 的距離。首先我們作 O 到 ¯PQ 的垂足 H,並試著計算 ¯OH。注意 ¯OH 其實就是 ΔOPQ 以 ¯PQ 為底時的高,所以可以用下面的方法計算: Length_OH(O: Point, PQ: Segment): A ← ΔOPQ return 2A/|PQ| ΔOPQ 可以用 Shoelace formula 計算。 但事情沒有這麼簡單。O 到 ¯PQ 的距離並不總是 ¯OH:當 $\angle OPQ...