二分搜尋法,不僅僅是查詢值,在演算法競賽中,經常可以見到二分搜尋法和其他演算法結合的題目。查詢值(手寫二分 和 使用lower_bound )
#include #include題意: 有n條繩子, 他們長度分別為。如果從它們中切割出條長度相同的繩子的話,這 條繩子每條繩子最長能有多長? 答案保留到小數點後2 位。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 = 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第八屆藍橋杯省賽第九題:分巧克力 練習:codevs 1766 裝果子兒童節那天有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消耗
在自己搭的部落格用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 ...