poj-3122-Pie

来源:互联网 发布:点点客工作 知乎 编辑:程序博客网 时间:2024/06/04 18:01
题意大概就是给你一堆半径,让你去求一种分发,使得每个人得到相同的蛋糕。题意很好理解,做法也很简单,二分。最左边为0,最右边为得到蛋糕的最大值。然后二分就开始了,直到满足条件就好了
 #include<cstdio>    #include<cstring>    #include<iostream>    #include<algorithm>    #define pi 3.14159265358;    using namespace std;    int main()    {        int t;        scanf("%d",&t);        while(t--)        {            double a[10005];            memset(a,0,sizeof(a));            int n,f;            scanf("%d%d",&n,&f);            double sum=0,v;            for(int i=0;i<n;i++)                {                    scanf("%lf",&a[i]);                    a[i]=a[i]*a[i];                    sum+=a[i];            }            f++;            double right,left,mid;            right=sum/f;            left=0;            while(right-left>0.0000001)            {                mid=(right+left)/2;                int cnt=0;                 for(int i = 0; i < n; i++) {                    cnt+= (int)(a[i]/mid);                }                 if(cnt < f)right= mid;                else if(cnt >= f) left = mid;            }            v=3.14159265358*mid;            printf("%.4lf\n",v);        }        return 0;    }

0 0
原创粉丝点击