题目连接:Pie
题目大意:
有N张饼,k个朋友,为了体面,必须把饼切割成大小一样的k+1块(包括主人自己),求出每个人能得到的最大饼体积。
前提:每人一块,饼可以有剩余
二分去暴力答案,确定下界为0,上界为最大体积的饼(每人一块,最大可能就是饼的体积都相等,也就是每块都是最大值)。
代码:
#include<stdio.h>
#include<math.h>
#define MAX_SIZE 100005
#define max(a,b) (a>b?a:b)
#define Pi acos(-1.0) //圆周率
#define eps 1e-6
double Volume[MAX_SIZE];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int N,F,ri;
while(~scanf("%d%d",&N,&F))
{
//printf("%lf\n",Pi);
double Max=-1;
for(int i=0;i<N;i++)
{
scanf("%d",&ri);
Volume[i]=ri*ri*Pi;
Max=max(Max,Volume[i]); //求出最大体积的Pie
}
double l=0.0,r=Max;
double Mid;
while(r-l>eps)
{
Mid=(l+r)/2;
int cnt=0;
for(int i=0;i<N;i++)
cnt+=(int)(Volume[i]/Mid); //按mid切割(取整)
if(cnt>=F+1) //能分配的人大于F+1,往上取值
l=Mid;
else
r=Mid;
}
printf("%.4lf\n",Mid);
}
}
return 0;
}