hdu1969

来源:互联网 发布:用友t3恢复数据在哪里 编辑:程序博客网 时间:2024/06/10 09:20

一道比较纯正的二分题目,也是比较简单的,它的大意是:有一堆派共N个,我有F个朋友来分这些派,问最多可以分得大小。

这些派是圆柱形的高都是1。告诉你所有的半径,求可以分到最大的面积(注意派是可以用刀 分开的但是分开后哪一些不够一份的地方就不能再要了,所以我们需要将最大的 一小份(也就是单元)用二分求出来,)。

注意:这里只要求小数点后4位,所以精确度到-5即可,如果数据卡的死,-8,-9可能会TLE。

#include<iostream>
using namespace std;
#include<stdio.h>
#include<cmath>
double a[10005];
const double PI=3.1415926535898;
const double L=1e-6;
int main()
{
    int N;
    int i,j,k;
    int F,num;
    double sum;
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&N,&F);
        sum=0;
        for(i=0;i<N;i++)
        {
            scanf("%lf",&a[i]);
            sum+=PI*a[i]*a[i];
        }
        sum/=(F+1);
     double low=0.0000;
     double high=sum;
     double mid=(low+high)/2;
     while(high-low>L)
     {
         num=0;
         for(i=0;i<N;i++)
            num+=(int)(PI*a[i]*a[i]/mid);
         if(num<(F+1))high=mid-L;
         else low=mid+L;
         mid=(low+high)/2;
     }
     printf("%.4lf\n",mid);
    }
  return 0;
}

0 0
原创粉丝点击