二分演算法的應用 不只是查詢值!

2021-09-19 15:50:04 字數 3035 閱讀 9035

二分搜尋法,不僅僅是查詢值,在演算法競賽中,經常可以見到二分搜尋法和其他演算法結合的題目。

查詢值(手寫二分 和 使用lower_bound )

#include #include 

using

namespace

std;

​const

int maxn = 1000 + 10;​

void

solve()

;

int n = 9, k = 14

;

int lb = 0, ub =n;

//重複迴圈, 直到解的存在範圍不大於1

while (ub - lb > 0

)

else

if (a[mid]

else

} }​

void

stl_solve();

int loc = lower_bound(a, a + 9, 14) -a;

cout

<< loc <

intmain()

題意: 有n條繩子, 他們長度分別為。如果從它們中切割出條長度相同的繩子的話,這 條繩子每條繩子最長能有多長? 答案保留到小數點後2 位。

限制條件

輸入

n = 4

k = 11

l =

輸出

2.00 (每條繩子分別可以得到4條、3條、2條、2條,共計11條繩子)

#include #include 

#include

using

namespace

std;​/*

4118.02

7.43

4.57

5.39

*/const

int maxn = 10000 + 200;//

輸入int

n, k;

double

l[maxn];

double

inf;​//

判斷是否滿足條件

bool c(double

x)

return num >=k;}​

void

solve()

else

}​ printf(

"%.2f\n

", floor(ub * 100) / 100); //

保留兩位小數}​

void

input()

}++inf;}​

intmain()

套用模板,求解藍橋杯原題

2017第八屆藍橋杯省賽第九題:分巧克力 ​

兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。

小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。

​ 為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足:

1. 形狀是正方形,邊長是整數

2. 大小相同

​例如一塊6x5的巧克力可以切出6塊2x2的巧克力或者2塊3x3的巧克力。

​當然小朋友們都希望得到的巧克力盡可能大,你能幫小hi計算出最大的邊長是多少麼?​輸入

第一行包含兩個整數n和k。(

1<= n, k <= 100000

) 以下n行每行包含兩個整數hi和wi。(

1<= hi, wi <= 100000

) 輸入保證每位小朋友至少能獲得一塊1x1的巧克力。 ​輸出

輸出切出的正方形巧克力最大可能的邊長。

​樣例輸入:210

6556

​樣例輸出:2​

資源約定:

峰值記憶體消耗(含虛擬機器)

<256m

cpu消耗

練習:codevs 1766 裝果子

在自己搭的部落格用md寫的:

posted @

2017-12-21 10:49

douzujun 閱讀(

...)

編輯收藏

插值演算法(二分查詢兄弟演算法)

設想一下這個情景 有這樣乙個陣列arr 如果要查詢邊界值1的話,利用二分查詢的效率,似乎不是那麼的高,原因在於,二分查詢每次定位都是在陣列中間,不夠靈活,如果有一種演算法,可以根據要查詢的值,自適應定位,那麼效率顯然就快很多,因而就有了插值演算法,它的公式為 location left k l 其中...

查詢演算法之二分查詢 插值查詢

對半查詢和斐波那契查詢對於元素關鍵字的整體分布沒有要求,可以均勻分布,也可以不均勻分布。對於關鍵字分布不均勻且沒有規律的情況,確實很難找到更好的方法提高演算法的查詢效率 但是如果查詢序列的關鍵字分布均與,那麼是可以利用這種均勻性來提高演算法效率的,例如使用插值查詢。在關鍵字值分布均勻的情況下,使用插...

二分查詢的應用

二分查詢是一種很有效率的查詢方式,每次查詢後餘下的區間是指數級遞減的。二分查詢的限制也很明顯,就是資料必須是拍過序的。首先我們來看通過二分查詢的方式來計算乙個數的平方根 def mysqrt n int,left int,right int,bit num float mid left right ...