切換
舊版
前往
大廳
主題

ZeroJudge - c575: APCS 2017-0304-4基地台 解題心得

Not In My Back Yard | 2019-08-26 23:00:31 | 巴幣 2 | 人氣 1001

題目連結:


題目大意:
第一列給定兩正整數 N 、 K (1 ≦ K < N ≦ 50000),代表需要服務的點有 N 個且有 K 個欲架設的基地台。接著的一列給定 N 個非負整數(不超過 1, 000, 000, 000),代表這 N 個服務點在標準一維座標軸上之座標(給定順序並非按照座標大小)。

基地台可以放在座標軸上任意位置,但是這 K 個基地台的總覆蓋範圍需要將 N 個服務點都含括於其中。求至少服務範圍直徑(直徑 ≧ 1)應為多少,才能使所有服務點皆在服務範圍內?



範例輸入:
範例一:
5 2
5 1 2 8 7
範例二:
5 1
7 5 1 2 8


範例輸出:
範例一:
3
範例二:
7


解題思維:
因為基地台可以放在任何地方,而不只是限制在服務點上而已。因此窮舉放置點是不明智的,一來是基地台數量不少、二是可能的座標點太多。

因此,可以採用如此題的方式——用二分搜尋法去搜「答案」。

首先我們將這 N 個服務點的座標值排序一下。因為直徑最小可能為 1 ,最大可能為離最遠的兩個服務點之距離(定為 R)。

因此設定下界 L = 1 、上界 U = R,接著就是套用二分搜尋法:定一變數 M = (L + U) ÷ 2。此時要檢查直徑為 M 是否為可能的情況。可以的話,降低上界 U 到 M;反之,提升下界 L 到 M + 1 。

而要檢查一個值是否為可行的直徑,就是將 N 個點好幾個約為欲測定直徑大小的區塊,測試看看區塊數是否小於等於 K 個。如果需要額外的基地台,則代表此直徑值是不可行的。

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

創作回應

更多創作