C C 二分查詢

2021-10-03 05:39:36 字數 1638 閱讀 3090

二分查詢的關鍵在於確定二分查詢的範圍l以及r改變的條件

實數型別的二分查詢(處理時需要擴大精度)

#include

using

namespace std;

const

double p=

acos(-

1.0)

;//定義π

int t,h;

double

find

(double l,

double r)

//半徑或者長的範圍

return r;

//返回符合條件的最小值

}int main (

)return0;

}

2.實數型的二分(此時需要化實數為整數)

/實數二分,精度會缺失(如果直接用double二分,最後%.2lf輸出的時候會自動向上取整,可能改變了答案),解決辦法是先把每根繩子長度a[i]乘以100化為整數,再按整數的方法二分,最後輸出答案時再除以100即可。/注意此時m可能等於0

#include

using

namespace std;

const

int n=

1e4+10;

double x,ans;

int n,k,l,r,m,a[n]

;bool

judge

(int m)

intmain()

l=0,r=

1e7;

//注意理解此時為什麼r不等於所有繩長的最短繩長

while

(l<=r)

//n=1 k=10000 a[1]=1.00時,二分過程中會出現m=0的情況,在judge函式中會除以0導致re

//要防止re,則特判二分過程中m=0直接break,退出二分,記下答案ans=0if(

judge

(m))ans=

1.0*m,l=m+1;

else r=m-1;

}printf

("%.2lf\n"

,ans/

100.0);

}return0;

}

3.整數型的二分查詢

#include

using

namespace std;

const

int n=

1e5+10;

int n,k,t,l,r,ans,a[n]

;bool

judge

(int mid)

//該函式用來判斷此時的每一天的價值和的最大值是否滿足條件

return num<=k;

}int

main()

//確定了二分查詢的範圍

while

(l<=r)

printf

("%d\n"

,ans);}

return0;

}

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

資料結構 二分查詢C C

思路 二分查詢就是每次取中間值,然後每次就可以減少一半的資料規模,從而達到 o log2 n 的時間複雜度。include using namespace std int find int int,int,int void output int a,int begin,int end int mai...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...