前往
大廳
主題

ZeroJudge - c942: 露營區規劃 解題心得

Not In My Back Yard | 2021-10-03 00:00:10 | 巴幣 102 | 人氣 292

題目連結:


題目大意:
輸入有多筆測試資料,每筆佔兩列(輸入以一列「0 0」作結)。測資第一列給定兩正整數 N 、 M(1 ≦ N ≦ 10,且 N ≦ M),代表現在有 N 個環形區域並且想要設置 M 個露營點,而露營點將設置於環形區域的最外側邊緣上。每個區域至少會設置一個露營點。測資第二列則給定 N 個整數,代表這些環形區域的半徑。

試問在讓所有同一區域內的露營區之間相隔距離(以兩者於環上相距的弧長而定)盡可能地小的情況下,每個區域分別可以設置的露營區之數量為何?



範例輸入:
2 5
10 6
0 0


範例輸出:
3 2


解題思維:
先將 N 個區域先各自塞一個露營區進去。

假設每個露營區半徑為 R1 、 R2 、 …… 、 RN,以及各自現在含有著 A1 、 A2 、 …… 、 AN 個露營區。

則當我們要多放一個露營區到這 N 個區域裡,我們可以塞在 Ri ÷ (Ai + 1) 比值最大的區域裡,因為其代表著這個露營區放在該區域所造成的「最小」距離會是最大的(也就是說我們盡量將露營區放在較不擠的區域中)。

重複以上步驟直到露營區都放完為止。而以上步驟同時也可以使用優先佇列(Priority Queue)來做,但是成效實際上不會差太多(因為區域數 N 不大)。

因此最後便可以求出每個區域應放的露營區各為多少個。




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

創作回應

更多創作