二分
#include <cstdio>
#include <cmath>
const int maxn = 10000 + 10;
const double pi = acos(-1.0);
double sz[maxn];
int n, f;
bool check(double mid) {
int cnt = 0;
for (int i = 0; i < n; i++) {
cnt += floor(sz[i] / mid);
}
return cnt >= f;
}
int main(int argc, char const *argv[]) {
int t;
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &f);
f++;
double max = 0;
for (int i = 0; i < n; i++) {
int rad;
scanf("%d", &rad);
sz[i] = pi * rad * rad;
if (sz[i] > max) {
max = sz[i];
}
}
double lb = 0;
double ub = max;
for (int i = 0; i < 50; i++) {
double mid = (lb + ub) / 2.0;
if (check(mid)) {
lb = mid;
} else {
ub = mid;
}
}
printf("%.4f\n", lb);
}
return 0;
}