题意:
给出人数,蛋糕数,以及各蛋糕的半径,求每个人能平均分到的最大面积
思路:
也是求最大值,与assemble类似,用到二分取尽量大的匹配
代码:
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
const double pi=acos(-1.0);
int k, f;
double s[10005];
int main() {
int kase;
int r;
scanf("%d", &kase);
while(kase --) {
double maxs = 0;
scanf("%d%d", &k, &f);
for(int i=0; i<k; i++) {
scanf("%d", &r);
s[i] = pi*r*r;
maxs = max(maxs, s[i]);
}
double l=0, r=maxs;
while(r-l>1e-6) {
double mid = (l+r)/2;
int sum = 0;
for(int i=0; i<k; i++) {
sum += s[i]/mid;
}
if(sum >= f+1) l = mid;
else r = mid;
}
printf("%.4lf\n", l);
}
return 0;
}