二分查詢的關鍵在於確定二分查詢的範圍和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 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...