POJ

来源:互联网 发布:怎么申请淘宝旗舰店 编辑:程序博客网 时间:2024/06/05 21:52

题意:给出n个朋友,m个苹果派,再给出m个苹果派的半径,求出可以分给n个朋友一摸一样的苹果派的最大面积(不可以拼凑,只可以是一整块)。

思路:贪心+二分

#include <iostream>#include <cstdio>#include <algorithm>#include <set>#include <string>#include <cstring>#include <cmath>using namespace std;#define pi acos(-1.0)#define exp 1e-5int s[10005];typedef long long ll;int n,f;int judge(double mid){    ll sum=0;    for(int i=1;i<=n;i++)    {        sum+=(int)(1.0*s[i]*s[i]*pi/mid);    }    return sum>=(f+1)? 1:0;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        double sum=0.0;        scanf("%d%d",&n,&f);        for(int i=1;i<=n;i++)        {            scanf("%d",&s[i]);            sum+=1.0*s[i]*s[i]*pi;        }        double l=0.0,r=sum,mid;        while(r-l>=exp){            mid=(l+r)/2.0;            if(judge(mid))                l=mid;            else                r=mid;        }        printf("%.4lf\n",l);    }    return 0;}


原创粉丝点击