这道题wa了很多次,原因是PI的精度问题,精度一定很大
#include <stdio.h>
#define maxn 100010
#define PI 3.14159265358979323846
int main()
{
int amount;
scanf("%d",&amount);
while(amount--)
{
int n,f;
scanf("%d%d",&n,&f);
int i;
double pie;
double s[maxn];
double high=0;
double low=0;
for(i=0;i<n;i++)
{
scanf("%lf",&pie);
s[i]=PI*pie*pie;
if(s[i]>high)
high=s[i];//因为每个人分的蛋糕必须是一整的
}
while((high-low)>1e-6)
{
int sum=0;
double mid=(high+low)/2;
for(i=0;i<n;i++)
{
sum+=(int)(s[i]/mid);
}
if(sum>=(f+1)) low=mid;
else high=mid;
}
printf("%.4lf\n",low);
}
return 0;
}