一开始开到y-x >1e-9直接超时;看来不可过度的去二分啊;
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
typedef long long LL;
const double P = acos(-1.0);
const int maxn = 10010;
double a[maxn];
int n,F;
int Judge(double x){
int cnt=0;
for(int i=1;i<=n;i++){
cnt+=floor(a[i]/x);
}
return cnt >= F ? 1 : 0;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&F);
F++;
double x=0,y=maxn;
for(int i=1;i<=n;i++){
scanf("%lf",&a[i]);
a[i]=P*a[i]*a[i];
y=max(y,a[i]);
}
while(y-x>1e-5){
double m=(y+x)/2;
if(Judge(m)) x=m;
else y=m;
}
printf("%.5lf\n",x);
}
return 0;
}