UVA 12097 Pie LA 3635 (二分)

来源:互联网 发布:什么社交软件好 编辑:程序博客网 时间:2024/05/17 06:05

大体题意:

给你n 个圆形派,有F+1个人来分这n 个派,每个人得到派的面积必须一样大,求最大面积(派必须是完整的,不能拼接!)

思路:

二分,我们直接二分答案x,看这个x合适不合适的标准是  能不能在n 个圆形派中,分出面积为x 的个数不少于f+1个,不行的话,继续搜!

一个面积为S的派能分面积为x 的个数为  S/x

详细见代码:

错了很多遍,注意二分的边界问题!!

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const double pi = acos(-1.0);int n,f;int a[10007];bool judge(double m){    int sum = 0;    for (int i = 0; i < n; ++i){        sum += (int)(pi*a[i]*a[i]/m);    }    return sum >= f+1;}int main(){    int T;    scanf("%d",&T);    while (T--){        scanf("%d %d",&n, &f);        double Max = 0;        for (int i = 0; i < n; ++i){            scanf("%d",a+i);        }        double l = 0, r = 1e9+7;        while(r - l > 1e-5){            double m = (l+r)/2;            if (judge(m))l = m;            else r=m;        }        printf("%.4f\n",l );    }    return 0;}



0 0