整數二分和浮點數二分

2021-10-19 07:14:41 字數 1225 閱讀 2522

注意點:

1.有單調性一定可以二分,二分不一定需要單調性

2.二分本質: 找到一種性質,將乙個區間一分為二,一部分滿足性質,另一部分不滿足性質,通過二分找到兩部分的邊界

3.二分一定有解,即能夠找到性質的邊界。無解通常跟題目有關。

4.浮點數二分: 精度足夠小時結束迴圈 或者 直接迴圈100次

while( r-l > 1e-6 ) // r-l足夠小時即認為找到了答案

保留x位小數 , 精度多2 即1e-(x+2)

一、整數二分模板

一、整數二分

求左部分的右邊界

true : [mid, r]

false : [l, mid-1]

mid = l + r + 1 >> 1

求右部分的左邊界

true : [l, mid]

false: [mid+1, r]

mid = l + r >> 1

整數二分例項

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。

對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。

如果陣列中不存在該元素,則返回「-1 -1」。

#include

#include

using

namespace std ;

const

int n =

1e5+10;

int q[n]

;int

main()

if( q[l]

!= x )

else cout << l <<

' ';

// 找右邊界

l =0, r = n-1;

while

( l < r )

cout << l << endl ;

}return0;

}

二、浮點數二分模板

例子: 求x的開根號值

int

main()

// // 2. 直接迴圈判斷

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

printf

("%.6lf"

, l)

;// 保留 x 位小數時,精度通常為 1e-(x+2)

return0;

}

二分 整數二分和浮點數二分

一定是單調的才可以二分。找中間點 判斷是否滿足check函式 此函式需要自己根據題意調整,假設紅色區域為滿足check函式,說明mid在紅色區域內,此時要在mid到r之間找,l mid,否則r mid 1。由於此時l mid 所以中間點應為 l r 1 2 中間點mid l r 2 mid l r ...

浮點數二分

2 浮點數二分 模板 浮點數二分演算法模板 模板題 acwing 790.數的三次方根 bool check double x double bsearch3 double l,double r return l acwing790.數的三次方根 給定乙個浮點數n,求它的三次方根。輸入格式 共一行,...

整數二分和浮點數二分基本思路和模板

出自南昌理工學院acm集訓隊 二分,是從一系列有序對中找出某乙個符合條件的數,找到之後把這個數的位置給返回,基本思想就是,我給你乙個資料範圍,打個比方1 200,我讓你猜我心中所想的那個數175,最基本的方法就是從頭到尾開始猜,是1嗎,不是,是2嗎,不是。一直猜到答案為止,這樣猜的話,最壞的情況是要...