POJ 1064 網線主管 二分搜尋

2021-10-03 06:45:53 字數 1366 閱讀 9643

原題傳送門

有 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 ...