二分查找部分的死循环,看不出来怎么改
#include<bits/stdc++.h>
using namespace std;
const double esp = 1e-6;
const double pi = 3.14159265359;
int tes,r[10010],fri,pan;
int L,R,M;
bool check(double mid)
{
int cnt = 0;
for(int j = 1;j <= pan;j++)
cnt = cnt + (r[j] / mid);
return cnt < fri;
}
int main()
{
scanf("%d",&tes);
for(int i = 0;i < tes;i++)
{
scanf("%d%d",&pan,&fri);
fri++;
double maxsiz = 0.0;
for(int j = 1;j <= pan;j++)
{
scanf("%d",&r[j]);
r[j] = r[j] * r[j];
if(maxsiz < r[j])
maxsiz = r[j];
}
L = 0.0;
R = maxsiz;
while(R - L > esp)
{
//cout << "1";
M = (R + L) / 2;
if(check(M))
R = M;
else
L = M;
}
printf("%.4lf\n",M * pi);
}
return 0;
}