题意:求double型的二分,左值是0,右值是最理想的可能,也就是总和处理f+1
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int MAXN = 10005;
double PI = acos(-1);
int n,f;
double R[MAXN];
double search(double l,double r){
if (r - l < 1e-6)
return l;
double mid = (l + r) / 2.0;
int sum = 0;
for (int i = 0; i < n; i++)
sum += R[i] / mid;
if (sum >= f) //分小了,或者还能更大
return search(mid,r);
else return search(l,mid);
}
int main(){
int t;
scanf("%d",&t);
while (t--){
scanf("%d%d",&n,&f);
f = f + 1;
double sum = 0.0;
for (int i = 0; i < n; i++){
scanf("%lf",&R[i]);
R[i] = PI * R[i] * R[i];
sum += R[i];
}
double ans = search(0,sum/f);
printf("%.4lf\n",ans);
}
return 0;
}