#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <climits>
#include <cstdlib>
#include <ctime>
using namespace std;
//ios::sync_with_stdio(false);
double a[10005];
int n;
const double pi = acos(-1.0);
int fun(double m)
{
int ans = 0;
for(int i = 0 ;i < n;i++)
{
ans += (int) (a[i] / m);
}
return ans;
}
int main()
{
int t;
cin >> t;
while(t--)
{
int f;
cin >> n >> f;
double sum = 0;
for(int i = 0; i < n;i++)
{
cin >> a[i];
a[i] = pi * a[i] * a[i];
sum += a[i];
}
double l = 0, r = sum;
sort(a,a+n);
for(int i = 0; i < 100;i++)
{
double m = (r + l )/ 2;
if(fun(m) >= (f+1))
{
l = m;
}
else
{
r = m;
}
}
printf("%.4f\n",(l+r)/2);
}
return 0;
}
因为判断一个面积x是否满足题意很简单,所以只要二分的枚举出x就可以求出答案
<a target=_blank href="http://https://icpcarchive.ecs.baylor.edu/external/36/3635.pdf">点此看题</a>