题意:
我现在要举办一个聚会,食物是很多派,有F个人,问题是怎么把现有的派能完整的分
F+1个体积一样的小块。
思路:
直接二分体积,不过要判断是否能分成F+1
注意点在于精度,L、R范围的确定,以及eps的精度是否足够。最开始就因为这些
细节而W两次。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 10005;
double eps = 1.0e-7;
double pi = 3.1415926535898;
int n,f;
double r[MAXN];
int check(double x)
{
int num = 0;
for(int i = 0;i < n; i++) {
double area = pi*r[i]*r[i];
num += (int)(area/x);
}
if(num >= f + 1)
return true;
else
return false;
}
int main()
{
//freopen("in.txt","r",stdin);
int ncase;
scanf("%d",&ncase);
while(ncase--) {
scanf("%d%d",&n,&f);
for(int i = 0;i < n; i++) {
scanf("%lf",&r[i]);
}
double L = 0,R = 10000*10000*pi;
while(R-L > eps) {
double mid = (L+R)/2;
if(check(mid))
L = mid;
else
R = mid;
}
printf("%.4lf\n",L);
}
return 0;
}