題意:
給你n個點,讓你求出x座標軸上一點到n個點中最大距離的最小值。
思路:二分(答案具有嚴格單調性,容易驗證答案是否正確)
這裡check函式比較難想
參考使用者:moyangxian
#include
using
namespace std;
typedef
long
long ll;
const
int inf =
0x3f3f3f3f
;const ll mod =
1e9+7;
const
double eps =
1e-8
;const ll maxn =
1e6+5;
int n;
double x[maxn]
,y[maxn]
;double ans1;
double ans2;
double ans;
bool
check
(double mid)
if(xr>=xl)
return1;
else
return0;
}int
main()
double l=
0.0,r=inf*
1.0;
while
(fabs
(r-l)
>eps)
else
} cout
)
}
思路:
三分模板題
最大距離最小,最小的點的左邊和右邊一定比他大,且這個函式顯單調遞減後單調遞增的趨勢,想到三分法。
寫個check函式求每次的最大距離比較即可。
#include
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int>p;
const
double eps =
1e-8
;const
int ninf =
0xc0c0c0c0
;const
int inf =
0x3f3f3f3f
;const ll mod =
1e9+7;
const ll maxn =
1e5+5;
int n;
double x[maxn]
,y[maxn]
;double
check
(double p)
return res;
}int
main()
double l=
-10000.0
,r=10000.0
;while
(r-l>eps)
printf
("%.5lf"
,check
(r))
;return0;
}
二分法與三分法
二分查詢基於分治策略的一種查詢方法,時間複雜度 o log 是用於解決單調有序問題,縮小問題規模 演算法步驟 演示 int binary search1 int num,int n,int x else return 1 二分問題模型 11110000問題 首先我們需要明確我們的目的是為了不斷縮小問...
二分三分法
x 待查詢的值,caculate 所要查詢的函式,這裡單調遞增。double low 區間下界 high 區間上界 mid while high low 1.0e 6 有區間下界left,區間上界right,mid為中點,midmid為靠近right的四等分點。即 mid left right 2 ...
二分三分法 (二)
最近剛學了二分法,還沒有學三分,所以在上課之前,把三分總體的預習了一下,感覺三分應該和二分大體的思路還是一致的,二分的思路是在乙個單調的數列基礎上,每次都求中間值,然後不斷縮小,最後求出解,這樣可以把時間壓縮到最小化。然而三分主要運用的方面是針對於數列是凹函式或者凸函式,先將乙個區間分成3份,每份佔...