題解 TJOI2007 路標設定

2022-05-05 19:39:12 字數 1129 閱讀 2531

目錄分析

注意事項

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市之間有一條長長的高速公路,這條公路的某些地方設有路標,但是大家都感覺路標設得太少了,相鄰兩個路標之間往往隔著相當長的一段距離。為了便於研究這個問題,我們把公路上相鄰路標的最大距離定義為該公路的 空曠指數 現在 決定在公路上增設一些路標,使得公路的 空曠指數 最小。他們請求你設計乙個程式計算...