二分搜索答案
注意PI的精度........
#include <stdio.h>
#define eps 1e-7
int n,f;
double ri[10005];
int test(double d){
int k=0,i;
for(i=0;i<n;i++){
if(ri[i]>=d)k+=(int)(ri[i]/d);
if(k>=f)return 1;
}
return 0;
}
int main(){
int t,i;
double min=0,max=0,d;
scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&f);
f++;
min=0;
max=0;
for(i=0;i<n;i++){
scanf("%lf",&ri[i]);
if(ri[i]>max){max=ri[i];}
ri[i]=ri[i]*ri[i];
}
max*=max;
while(max-min>eps){ //二分法,搜索答案,
d=(min+max)/2;
if(test(d))min=d;
else max=d;
}
printf("%.4lf
",d*3.14159265358979323846); //看discuss里说的,,,,第一次用,MATH_PI编译错误了
}
return 0;
}