• 小数的二分查找——pku3122


    上届:最大的饼的面积
    下届:0
    二分。。。
    注意的是while条件与整数的二分查找有区别(r-l)>0.00001
    取PI的技巧:const double PI=acos(-1.0);
    View Code
    #include<stdio.h>
    #include
    <math.h>

    const double PI=acos(-1.0);
    double a[10009];
    int n,m;

    double ss(double r)
    {
    return r*r*PI;
    }

    int much(double s)//当面积为S时可以把这些饼分成几个有效饼
    {
    int i;
    int add=0;
    for(i=0;i<n;i++)
    {
    add
    +=(int)(a[i]/s);
    }
    return add;
    }

    int main()
    {
    int t;
    scanf(
    "%d",&t);
    while(t--)
    {

    scanf(
    "%d%d",&n,&m);
    m
    ++;

    double max;
    int i,R;

    for(i=0;i<n;i++)
    {
    scanf(
    "%d",&R);
    a[i]
    =ss(R*1.0);
    if(a[i]>max)
    max
    =a[i];
    }

    double l=0,r=max,mid;
    int add;
    while(((r-l)>0.00001)||(add<m))//当r,l不是很接近,或是饼分的不够时
    {
    mid
    =(l+r)/2.0;
    add
    =much(mid);

    if(add>=m)//分的饼数量多于等于要求量时 尽可能扩大饼的面积
    {
    l
    =mid;
    }
    else
    {
    r
    =mid;
    }
    }
    printf(
    "%.4lf\n",mid);
    }
    }

      

  • 相关阅读:
    HDU4465 Candy
    《有关概率和期望问题的研究》读书笔记(完成度:40%)
    HDU5583 Kingdom of Black and White
    Gym100548F Color
    HDU6035 Colorful Tree
    Echarts笔记
    springMVC
    Struts2
    SSH框架学习中遇到的问题
    I/O流
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2158896.html
Copyright © 2020-2023  润新知