分蛋糕(二分法的應用)

2021-10-01 07:55:38 字數 1008 閱讀 9911

描述

我的生日要到了!根據習俗,我需要將一些派分給大家。我有n個不同口味、不同大小的派。有f個朋友會來參加我的派對,每個人會拿到一塊派(必須乙個派的一塊,不能由幾個派的小塊拼成;可以是一整個派)。

我的朋友們都特別小氣,如果有人拿到更大的一塊,就會開始抱怨。因此所有人拿到的派是同樣大小的(但不需要是同樣形狀的),雖然這樣有些派會被浪費,但總比搞砸整個派對好。當然,我也要給自己留一塊,而這一塊也要和其他人的同樣大小。

請問我們每個人拿到的派最大是多少?每個派都是乙個高為1,半徑不等的圓柱體。

輸入第一行包含兩個正整數n和f,1 ≤ n, f ≤ 10 000,表示派的數量和朋友的數量。

第二行包含n個1到10000之間的整數,表示每個派的半徑。

輸出輸出每個人能得到的最大的派的體積,精確到小數點後三位。

樣例輸入

3 34 3 3

樣例輸出

25.133

#include

#define n 10000

#define pi 3.1415926

#define eps 1e-3

intmain()

double left =

0, mid;

double right = sum /

(m +1)

;while

(right - left > eps)

if(temp >= m +1)

else

}printf

("%.3f\n"

, mid)

;}

顯然,分到得派的大小有最大值就是總體積/人數,但是這個值不一定能取到,因為如果有特別小的pie,體積就小於總體積,這個值是不可能取到的。(必須乙個派的一塊,不能由幾個派的小塊拼成;可以是一整個派)

這個題的策略是每個派不一定分給所以人,只分給幾個人,分給的人數就是這快派的體積/乙個人分的派的體積。如果這個值加起來大於等於總人數,說明這個最大體積過小,若否,說明這個體積過大。然後二分搜尋得到答案。

二分法應用

eg poj 2456 瘋牛 include include includeusing namespace std typedef long long ll const int maxn 1e7 10 ll a maxn ll n,c 對距離進行二分 int ans 0 int sum 1 int ...

二分法及其應用

二分法,是通過不斷縮小解的可能存在的範圍,從而求得問題的最優解的方法。經常有二分與其他演算法結合的題目。1.從有序陣列查詢某個值 以stl中的lower bound與upper bound為例 lower boud begin,end,val 函式輸入需要查詢的有序數列前閉後開區間,查詢數列中第乙個...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...