目錄分析
注意事項
code
執行限制:時間 \(1.00\ \textrm\),空間 \(128\ \textrm\)。
b 市和 t 市之間有一條長長的高速公路,這條公路的某些地方設有路標,但是大家都感覺路標設得太少了,相鄰兩個路標之間往往隔著相當長的一段距離。為了便於研究這個問題,我們把公路上相鄰路標的最大距離定義為該公路「空曠指數」。
現在**決定在公路上增設一些路標,使得公路的「空曠指數」最小。他們請求你設計乙個程式計算能達到的最小值是多少。
請注意,公路的起點和終點保證已設有路標,公路的長度為整數,並且原有路標和新設路標都必須距起點整數個單位距離。
第一行包括三個數 \(l\)、\(n\)、\(k\),分別表示公路的長度,原有路標的數量,以及最多可增設的路標數量。
第二行包括遞增排列的 \(n\) 個整數,分別表示原有的 \(n\) 個路標的位置。路標的位置用距起點的距離表示,且一定位於區間 \([0,l]\) 內。
輸出一行,包含乙個整數,表示增設路標後能達到的最小「空曠指數」值。
求相鄰路標距離最大值的最小答案,可以嘗試用二分答案解決。
顯然,這樣轉化後問題就是「隔一定距離放路標最少放幾個」,易證這隔問題的答案滿足單調性。我們二分找到答案 \(\le k\) 的最大值,也就是路標數量的最小值。
路障數 \(=\) 分割後的最小段數 \(-1=\left\lceil\dfrac\right\rceil-1\)(\(d\) 為最大距離)。而不是 \(\left\lfloor\dfrac\right\rfloor\)。
#include using namespace std;
const int max_n = 100000;
int diff[max_n], n, k;
inline int ceiling_div(int a, int b) // 計算 ceil(n/d)
bool judge(int dis) // 判斷
int main()
lb = 0, ub = l;
while (lb < ub) // 二分 [lb,ub)
printf("%d\n", ans);
return 0; // 然後就 ac 了、
}
二分答案 TJOI2007 路標設定
本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 傳送門 在刷題時,總會遇到求最大值最小,最小值最大問題,也許它會暗喻是這樣的乙個問題。對於這樣的乙個問題,你會發現用dp和列舉都會超時超記憶體,或者說很麻煩,所以這是乙個比較簡單的解題方式。對於難以直接確定解的問題,採取二分列舉 檢驗的思...
P3853 TJOI2007 路標設定
b市和t市之間有一條長長的高速公路,這條公路的某些地方設有路標,但是大家都感覺路標設得太少了,相鄰兩個路標之間往往隔著相當長的一段距離。為了便於研究這個問題,我們把公路上相鄰路標的最大距離定義為該公路的 空曠指數 現在 決定在公路上增設一些路標,使得公路的 空曠指數 最小。他們請求你設計乙個程式計算...
洛谷 3853 路標設定
b市和t市之間有一條長長的高速公路,這條公路的某些地方設有路標,但是大家都感覺路標設得太少了,相鄰兩個路標之間往往隔著相當長的一段距離。為了便於研究這個問題,我們把公路上相鄰路標的最大距離定義為該公路的 空曠指數 現在 決定在公路上增設一些路標,使得公路的 空曠指數 最小。他們請求你設計乙個程式計算...