題目:派
我的生日要到了!根據習俗,我需要將一些派分給大家。我有n個不同口味、不同大小的派。有f個朋友會來參加我的派對,每個人會拿到一塊派(必須乙個派的一塊,不能由幾個派的小塊拼成;可以是一整個派)。
我的朋友們都特別小氣,如果有人拿到更大的一塊,就會開始抱怨。因此所有人拿到的派是同樣大小的(但不需要是同樣形狀的),雖然這樣有些派會被浪費,但總比搞砸整個派對好。當然,我也要給自己留一塊,而這一塊也要和其他人的同樣大小。
請問我們每個人拿到的派最大是多少?每個派都是乙個高為1,半徑不等的圓柱體。
第一行包含兩個正整數n和f,1 ≤ n, f ≤ 10 000,表示派的數量和朋友的數量。 第二行包含n個1到10000之間的整數,表示每個派的半徑。
輸出每個人能得到的最大的派的體積,精確到小數點後三位。
3 3
4 3 3
在這裡給出相應的輸出。例如:25.133
解法心得:
首先由於計算涉及到派的體積,需要設定乙個常量pi
讀題後,我首先想到,單人分到的最大的派一定是從完整的最大的派中切下來的,因此先找到最大的派
再利用二分法,找到可以滿足題意分派的體積值
在尋找體積值的函式中,我設定了乙個cnt值,用來計算每乙個體積值能分給的人數,故cnt值需要大於等於m+1,即需要多於或等於朋友的人數。
**實現:
#include#include#include
#include
using
namespace
std;
const
int maxn=10000+10
;const
double pi=acos(-1.0
);double
a[maxn];
intn,m;
bool can(double
s)
return cnt>=m+1;}
intmain()
double
mid;
while(r-l>1e-5
)
else r=mid;
}cout
<<3)
}
演算法第二章上機實踐報告
實踐題目名稱 找第k個小的數 問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。演算法描述 就是先假設a left 為這個分界值x,然後排序。比較x是不是第k個如果是,返回這個值。如果不是比較一下x和a k 的大小,如果xa k 遞迴在x的右邊找 演...
演算法第二章上機實踐報告
7 1 最大子列和問題 20分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資...
演算法第二章上機實踐報告
1,實踐題目名稱 最大子列和問題 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試...