题意
传送门 POJ 3122
题解
二分答案,统计各块派最多可以切分出的整数的块即可。
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define eps 1e-6
#define maxn 10005
const double pi = acos(-1.0);
int t, n, f, r[maxn];
double s[maxn];
bool judge(double x)
{
int cnt = 0;
for (int i = 0; i < n; i++)
{
cnt += s[i] / x;
}
return cnt >= f;
}
int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &f);
++f;
int mx = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", r + i);
mx = max(mx, r[i]), s[i] = r[i] * r[i] * pi;
}
double lb = 0, ub = mx * mx * pi;
while (ub - lb > eps)
{
double mid = (ub + lb) / 2;
if (judge(mid))
lb = mid;
else
ub = mid;
}
printf("%.4lf\n", lb);
}
return 0;
}