原題傳送門
有 n
nn條繩子,它們的長度分別為 l
il_i
li,如果從它們中切割出k
kk條長度相同的繩子的話,這些繩子每條最長能有多長?答案保留到小數點後 2位
白書中所謂典型的二分搜尋題,左邊界從0開始,右邊界從所有繩子中最長的開始,每次統計(l+
r)/2
(l+r)/2
(l+r)/
2能切割出來多少繩子,注意以下事項:
(1)由於要保留滿足條件的最大長度,因此如果在mid
midmi
d處滿足條件,應該使得l=m
id
l=mid
l=mi
d,保留r
rr這個較大值。
(2)注意輸出格式,特判r
<
0.1r<0.1
r<0.
1的情況,強制丟棄尾數int
(r
∗100)/
100.0
int(r * 100) / 100.0
int(r∗
100)
/100
.0。(3)迴圈條件的設定,由於是小數,因此設定為l−r
sl-rl− rs,這樣的形式,防止小數因為精度陷入無限迴圈。#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define max 100005
#define ll long long
#define inf 1000005
#define p pair
ll n, m, ans =0;
double len[max]
;ll cnt
(double mid)
return sum;
}int
main()
while
(r - l>
0.001
)else l = mid;}if
(r >=
0.1)cout << fixed <<
setprecision(2
)<<
int(r *
100)
/100.0
<< endl;
else cout << fixed <<
setprecision(2
)<<
0.0<< endl;
}
POJ 1064 二分搜尋
poj 1064 題目大意 有n條繩子,他們的長度分別為li,如果從他們中切割k條長度相同的繩子的話,這k條繩子每條最長能有多長?答案保留到小數點後2位 演算法分析 這個問題用二分搜尋可以非常容易的求得答案。讓我們套用二分搜尋的模型試著解決這個問題。令 條件c x 可以得到k條長度為x的繩子 則問題...
POJ 1064 二分搜尋
poj 1064 題目大意 有n條繩子,他們的長度分別為li,如果從他們中切割k條長度相同的繩子的話,這k條繩子每條最長能有多長?答案保留到小數點後2位 演算法分析 這個問題用二分搜尋可以非常容易的求得答案。讓我們套用二分搜尋的模型試著解決這個問題。令 條件c x 可以得到k條長度為x的繩子 則問題...
POJ1064 簡單二分
題意 有n條繩子,他們的長度分別為li。如果從他們中切割出k條長度相同的繩子的話,這k條繩子每條最長能有多長。答案保留到小數點後兩位。思路 二分搜尋的模型解決 求滿足某個條件c x 的最小 大 的x 這一問題。這個題裡 c x 可以得到k條長度為x的繩子 由於長度為li的繩子最多可以切出floor ...