HDU_1969_Pie

来源:互联网 发布:百度数据库在哪里 编辑:程序博客网 时间:2024/06/08 09:45

这个题目基本就是坑细节和精度。

是否求饼的总面积然后除以人数来确定二分上限并不是这个问题的关键。

而且不知道饼多的时候求总面积会不会产生误差。

另外收到提醒 count,max等最好不再作为变量。

#include <iostream>#include<stdio.h>#include<cmath>using namespace std;typedef double LD;const LD AC=1e-6;  //保留4位要多一些,但太高会超时const LD PI=acos(-1.0);const int M=10005;LD r[M];int npi(LD x,int n){    int count=0;    for(int i=0;i<n;i++)        count+=floor(r[i]/x);  //这里要向下取正    return count;}LD bs(LD max,int f,int n){    LD lo=0,hi=max;    LD mid;    while(hi-lo>=AC)    {        mid=(hi+lo)/2.0;        if(npi(mid,n)>=f)            lo=mid;        else            hi=mid;    }    return lo;                //lo是最满足题目条件的hi与mid不一定}int main(){    int t;    int n,f;    LD maxp;    scanf("%d",&t);    while(t--)    {        maxp=0;        scanf("%d%d",&n,&f);        f++;           //把f从朋友数变成总人数        for(int i=0;i<n;i++)        {            scanf("%lf",&r[i]);            r[i]=r[i]*r[i]*PI;            if(r[i]>maxp)                maxp=r[i];        }        printf("%.4lf\n",bs(maxp,f,n));  //这里是个坑,必须写%.4lf别的不行    }    return 0;}


0 0
原创粉丝点击