/*1441. Pie(二分法求可以分得Pie的最大体积)
给出n个pie(圆柱型,高为1)的半径,f+1个人。求
可以给每个人分得pie的体积
*/
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define PI 3.1415926535898
double V[10001];
int pNum, fNum, r;
bool can(double mid)
{
int pieNum = 0;
for(int i=1; i<=pNum; i++)
{
pieNum += floor(V[i]/mid);
}
//如果可分得pie的数量>=fNum+1,则继续往上取pie的大小
return pieNum >= fNum+1;
}
bool cmp(double a, double b)
{
return a>b;
}
int main()
{
int n;
cin >> n;
while(n--)
{
cin >> pNum >> fNum;
double maxArea =-1;
for(int i=1; i<=pNum; i++)
{
cin >> r;
V[i]= PI * r * r;
maxArea = max(maxArea, V[i]);
}
double low = 0, high = maxArea, mid;
while(high - low >= 1e-5) //注意精度
{
mid = (low + high)/2;
if(can(mid))
{
low = mid; //往上取
}
else
high = mid;
}
printf("%.4lf\n", high);
}
system("pause");
return 0;
}
1441. Pie(二分法求可以分得Pie的最大体积)
最新推荐文章于 2020-02-25 14:11:00 发布