/*
给你n个蛋糕的半径,你有m个朋友,所以总共有m+1个人,现在要分蛋糕,要求每个人分到的大小都是一样的,且每个人的蛋糕都是从一块上切割下来的(不能是2个不同的蛋糕拼起来的),现在问每个人最多能分到多少蛋糕(体积),保留到小数点后4位输出。
Input
第一行是组数T,接下来是T组数据。
每组数据包含2行,第一行是n和m,均不超过10000,参考描述。
第二行是n个数,每个数表示一个蛋糕的半径,均不超过10000.
Output
对每组数据输出一个数一行,为分到的蛋糕的体积。
Sample Input
3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2
Sample Output
25.1327
3.1416
50.2655
Hint
比如第二组
1 24
5
表示有一个半径是5的蛋糕,所以体积是25pi,现在你们有1+24个人分,每人能分到pi
*/
/*
本题是中文化后的题 题意很明白
因为 答案要精确到 4位 因此联想 要使用二分;
坑点
我编号后 pi值 取3.141592;
答案错误
以后多记几位 3.1415926535898
*/
#include<stdio.h>
#include<algorithm>
using namespace std;
int pi;
double pi1[10010];
bool cmp(double a,double b)
{
return a<b;
}
int tt(double x)
{
int s=0;
for(int i=0;i<pi;i++)
{
s += (int)(pi1[i]/x);
}
return s;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int fir;
scanf("%d%d",&pi,&fir);
int s=0;
for(int j=0;j<pi;j++)
{
scanf("%lf",&pi1[j]);
pi1[j] = pi1[j]*pi1[j]*3.1415926535898;
}
sort(pi1,pi1+pi);
fir++;
double r,l,mid;
r = 0.0;
l = pi1[pi-1];
while(l-r>=1e-6)
{
mid = (r+l)/2;
if(tt(mid)>=fir)
r = mid;
else if(tt(mid)<fir)
l = mid;
}
printf("%.4lf\n",r);
}
}