Uva 派 (Pie,NWERC 2006,LA 3635)

时间:2021-10-24 15:49:03

依然是一道二分查找

 #include<iostream>
#include<cstdio>
#include<cmath>
using namespace std; const double PI=acos(-1.0);
int N,F;
double r[]; bool ok(double area)
{
int sum=;
for(int i=;i<N;i++)
sum+=floor(r[i]/area);
return sum>=F+;
} int main()
{
int T;
cin>>T;
while(T--)
{
cin>>N>>F;
double maxn=-;
for(int i=;i<N;i++)
{
int a;
cin>>a;
r[i]=PI*a*a;
maxn=max(maxn,r[i]);
}
double L=,R=maxn;
while(R-L>1e-)
{
double M=(L+R)/;
if(ok(M)) L=M;else R=M;
}
printf("%.4lf\n",L);
}
return ;
}