http://www.spoj.com/problems/PIE/
一堆圆柱形的馅饼,一堆朋友,要求将这堆馅饼平等的分给这堆朋友(包括自己),馅饼可以被切成任何形状,但是只能是一块,求最大能分成的馅饼体积.
思路:二分答案.
#include <iostream>
#include <cstdio>
using namespace std;
const double PI = 3.1415926535898;
const int maxn = 10010;
int n, m;
double rad[maxn];
bool ok(double V){
int i = 0, j = m;
while(j > 0 && i < n){
double volumn = PI * rad[i] * rad[i];
j -= (int)(volumn / V);
++i;
}
if(j > 0) return false;
return true;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
double l = 0, r = 0,ans = 0;
scanf("%d %d", &n, &m);
for(int i = 0; i < n; ++i){
scanf("%lf", &rad[i]);
r = max(r, rad[i]);
}
r = PI * r * r;
m++;
while(l + 1e-5 < r){
double m = (l + r) / 2.0;
if(ok(m)){
ans = max(ans, m);
l = m;
}else{
r = m;
}
}
printf("%.4lf\n", ans);
}
}