二分答案 TJOI2007 路標設定

2022-05-07 04:09:10 字數 1426 閱讀 1678

本人水平有限,題解不到為處,請多多諒解

本蒟蒻謝謝大家**

題目:傳送門

在刷題時,總會遇到求最大值最小,最小值最大問題,也許它會暗喻是這樣的乙個問題。對於這樣的乙個問題,你會發現用dp和列舉都會超時超記憶體,或者說很麻煩,所以這是乙個比較簡單的解題方式。

•對於難以直接確定解的問題,採取二分列舉+檢驗的思想.

•已知解為x,驗證x是否滿足要求.

•如果答案具有特定的範圍,並且驗證答案是否成立的函式具有單調性。則可以在範圍內對答案進行二分驗證,從而快速確定答案。

對於答案判斷:

在二分答案的時候需要判斷,從而確定下乙個範圍。

可以用乙個bool check(x)函式來判斷,返回true表示滿足,返回false表示不滿足.

可以模擬數學函式f(x)>=0和f(x)<0來理解.

根據具體問題寫出相應的check函式往往就是解決問題的關鍵點

題目樣例說明:因為題目要求分為幾段中的最小段,所以此題用二分可以保證相鄰幾段相差盡肯能的小

因為資料n<=10000000;通過樣例分析,且當題目要求是最大值求最小或最小值求最大即可得出這是一到二分題。

注意:保證在二分之前的數列必須是具有單調性的,才可以求出最優解

樣例解析:將一段區間分成(k+n)段,找出(k+n)的一段最大值。因為k不確定,所以如何分也不確定,我們就是要找出這段最大值在整個若干次情況中與其餘一段最大值比較,取這些裡面最小的。

本題是一道二分答案的模板題,只需注意一下細節即可

code:

#include//

#pragma gcc optimize(3)

int l,n,k,a[110000],dis[110000],ans=0

,kk,mm,yzl;

using

namespace

std;

inline

intread()

while(ch<='

9'&&ch>='0')

return x*f;

}bool check(int mid)//

判斷是否可以繼續二分下去

if(num>k)return0;

return1;

}int

main()

ls=0;rs=l;

while(ls<=rs)

else

}printf(

"%d\n

",yzl);//

此時mid==ls,也可以直接輸出ls

return0;

}/*9 2 2

0 83

*/

題解 TJOI2007 路標設定

目錄分析 注意事項 code 執行限制 時間 1.00 textrm 空間 128 textrm b 市和 t 市之間有一條長長的高速公路,這條公路的某些地方設有路標,但是大家都感覺路標設得太少了,相鄰兩個路標之間往往隔著相當長的一段距離。為了便於研究這個問題,我們把公路上相鄰路標的最大距離定義為該...

二分查詢與二分答案

主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...

二分查詢和二分答案

1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...