專題總結 二分搜尋專題

2022-05-10 03:18:51 字數 2504 閱讀 1004

1.1從有序陣列中查詢某值

//陣列長 目標值

int n, k;

int arr[n];

void solve()

return lst;

//此時 fst + 1 = lst

}

stl關於二分的應用

stl

lower_bound(begin, end, key)

//從陣列的begin位置到end-1位置二分查詢第乙個大於或等於num的數字

//找到返回該數字的位址,不存在則返回end。

//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。

upper_bound(begin, end, key)

//從陣列的begin位置到end-1位置二分查詢第乙個大於num的數字

//找到返回該數字的位址,不存在則返回end。

//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。

lower_bound(begin, end, num, greater())

//從陣列的begin位置到end-1位置二分查詢第乙個小於或等於num的數字

//找到返回該數字的位址,不存在則返回end。

//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。

upper_bound(begin, end, num, greater())

//從陣列的begin位置到end-1位置二分查詢第乙個小於num的數字

//找到返回該數字的位址,不存在則返回end。

//通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。

sort(num, num + 6, cmp);

//按從大到小排序

int posa =lower_bound(num, num + 6, 7, greater()) - num;

//返回陣列中第乙個小於或等於被查數的值

int posb =upper_bound(num, num + 6, 7, greater()) - num;

//返回陣列中第乙個小於被查數的值

[51nod] 1001 陣列中和等於k的數對

[51nod] 1080 兩個數的平方和

[模板] 結構體使用cmp sort 二分 的技巧 (過載) 應用51nod 四個數和為零

1.2假定解並判斷是否可行

大意:切k段長度相同的繩子求最大長度

c(x) = (floor(l/x))的總和是否 >= k

double t;

int n, k;

double arr[maxn];

bool judge(double x)

return ret >= k;

}int main()

double fst = 0.0, lst = 1010101010.0, mid;

for(int i = 0; i < 100; i++)

printf("%.2f", floor(fst * 100) / 100);

return 0;

}

在無法準確確定結束範圍時,可按次數不斷逼近 100次可達到10^-30的精度

或使用(lst - fst) > eps,但eps不可太小,容易死迴圈。

1.3最大值最小化

void solve()

return fst;

}

[二分] [poj] 2456 aggressive cows

[二分答案][洛谷] p1316 丟瓶蓋

複雜度大概在 o(n*logn)

1.4最大化平均值

現有n物的重價是w和v,選k物使得單位重量價值最大

double wei[maxn];

double val[maxn];

double jud[maxn];

int n, m;

bool cmp(double a, double b)

bool judge(double x)

int main()

printf("%.2lf\n", lst);

} return 0;

}

v[0]+v[1]+v[2]+...+v[n-1]             n種物品的總價值

x * (w[0]+w[1]+w[2]+...+w[n-1]) 所猜測的單位價值為x時的總價值

v[0] - x*w[0]

v[1] - x*w[1]

v[2] - x*w[2]

......

排序之後取前k種最大的值相加

(v[n-1]+v[n-2]+..v[n-k]) = s1 與 x*(w[n-1]+w[n-2]+...w[n-k]) = s2 相比較

如果s1 >= s2 說明x的值還不夠大,s1 < s2,說明x太大了

leetcode專題訓練 二分搜尋

1 35.搜尋插入位置 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。2 74.搜尋二維矩陣 編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左...

專題二 總結(搜尋)

2016 04 24 這個專題主要就講了兩個搜尋 廣度搜尋和深度搜尋 bfs and dfs 通過做了這麼多題,總結一下,其實廣度搜尋和深度搜尋都是一種盲目搜尋,也可以叫暴力搜尋吧?需要把每個結點都搜一遍,老師說很多題都能用搜尋來解決,比如最近上課講的動態規劃問題許多就能用搜尋來解決。但它們不適合解...

專題二搜尋總結

一,二分搜尋法 二分搜尋法 是通過不斷縮小解可能存在的範圍,從而求得問題最優解的方法。在程式設計競賽特別是acm中,經常可以見到二分搜尋法和其他演算法結合的題目。二。廣搜 從初始節點開始,應用算符生成第一層節點,檢查目標節點是否在這些後繼節點中,若沒有,再用產生式規則將所有第一層的節點逐一擴充套件,...