zoukankan      html  css  js  c++  java
  • Pie(二分法)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C

    题意:

           我过生日请了F个朋友参加我的生日party,m个蛋糕,我要把它平均分给每个人(包括我),每个人的蛋糕都是整块整块的,并且分的蛋糕大小要一样(形状可以不一样),每块蛋糕都是圆柱,高度都是1。每个朋友(包括我)最多可以分到的蛋糕面积是多少。

           案例:

           input

           3 

           3 3

           4 3 3

           1 24

           5

           10 5

           1 4 2 3 4 5 6 5 4 2

           output

           25.1327

           3.1314

           50.2655

    思路分析:

            采用二分查找,找出最大的面积所在区间。

            逐步的缩小范围,最后当左右端点相差小于0.00001时,即可取左端点为最大的面积。

            确定是左是右区间时,可以记录每个蛋糕的可以分的人数的和,比较它与F的大小就可以但到目的。

    源代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 using namespace std;
     5 int N,F;
     6 double are[10010];
     7 double pi=acos(-1.0);
     8 bool judge(double area)
     9 {
    10     int count=0;
    11     for(int i=0;i<N;i++)
    12     {
    13         count+=(int)(are[i]/area);       //记录每个蛋糕可以分到的人数的总和
    14     }
    15     if(count>=(F+1))    return true;         //不要忘记包括我
    16     else return false;
    17 }
    18 void max_area(double maxn)
    19 {
    20     double l,r,mid;
    21     l=0;r=maxn;
    22     while(r-l>0.00001)         //二分
    23     {
    24         mid=(l+r)/2;
    25         if(judge(mid)) l=mid;
    26         else r=mid;
    27     }
    28     printf("%.4f
    ",l);
    29 }
    30 int main()
    31 {
    32     int t,r;
    33     cin>>t;
    34     while(t--)
    35     {
    36         double maxn=-1;
    37         cin>>N>>F;
    38         for(int i=0;i<N;i++)
    39         {
    40             cin>>r;
    41             are[i]=r*r*pi;
    42             if(maxn<are[i])
    43                 maxn=are[i];
    44         }
    45         max_area(maxn);
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    java——异常(一)
    java —— 全面解析 Annotation
    多线程(一)——三种实现方式
    java ——static 关键词总结
    java —— equals 与 ==
    java——数组与内存控制
    java—— finall 关键词
    File类实现文件夹和文件复制
    java —— 内部类
    类成员——代码块
  • 原文地址:https://www.cnblogs.com/q-c-y/p/4705933.html
Copyright © 2011-2022 走看看