HDU 1969 Pie [二分]

来源:互联网 发布:怎么做一个软件 编辑:程序博客网 时间:2024/05/21 22:25

题意:给出n个蛋糕的半径,m个人,求将蛋糕分给m+1个人每个人得到的蛋糕面积相同,求每个人能得到的最大面积。每个人得到的蛋糕必须是整块的,不能拼起来。

题解:二分每个人能得到的最大面积,判断一下当前面积下能否分成。

AC代码:

#include<stdio.h>#include<math.h>#include<iostream>#define eps 1e-5#define pi acos(-1.0)using namespace std;double a[10005];int n,m;int judge(double x){    int i;    int sum = 0;    for(i = 0; i<n; i++)    {        sum+=int(a[i]/x);        if(sum>=(m+1))            return 1;    }    return 0;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&m);        double ma=0;        for(int i=0;i<n;i++)        {            scanf("%lf",&a[i]);            a[i]=a[i]*a[i]*pi;            ma=max(ma,a[i]);        }        double l,r;        l=0,r=ma;        for(int i=0;i<1000;i++)        {            double mid=(l+r)/2;            if(judge(mid))l=mid;            else r=mid;        }        printf("%.4lf\n",l);    }}