zoukankan      html  css  js  c++  java
  • ACM pie

    我的生日快到了,传统上我正在做馅饼。不只是一个馅饼,不,我有N个,各种口味和各种尺寸。 数量为F我的朋友会来到我的聚会,每个人都得到一个馅饼。 这应该是一块馅饼,而不是几个小块,因为看起来很乱。这一块可以是一整块。

    我的朋友们很烦人,如果他们中的一个比其他人得到更大的一块,他们就会开始抱怨。因此,他们所有人都应该得到同样大小(但不一定是同样的形状)的碎片,即使这导致了一些馅饼被破坏(这比破坏聚会更好)。 当然,我也想要一块馅饼,那块也应该是同样大小的。

    我们所有人都可以获得最大的可能尺寸是多少?所有的馅饼都是圆柱形的,它们都具有相同的高度1,但馅饼的半径可能不同的。

    Input

    一行为正整数:测试用例数。 然后对于每个测试用例:

    ---一行与两个整数N和F与1 <= N,F <= 10000:饼的数量和朋友的数量。
    ---一行N个整数ri与1 <= ri <= 10000:馅饼的半径。

    Output

    对于每个测试用例,输出一行,最大可能体积V,这样我和我的朋友们都能得到一块馅饼的大小,答案应该是作为一个浮点数而且绝对误差最多10 ^(-3)。

    Sample Input

    3
    3 3
    4 3 3
    1 24
    5
    10 5
    1 4 2 3 4 5 6 5 4 2

    Sample Output25.1327

    3.1416
    50.2655

    就是我要开party了,朋友来了,我要均分n块馅饼给自己和朋友们,但是呢,每个人只能得到一块馅饼,不能有拼接的馅饼块。
    按道理 人数应该为f+1了,
    想一想,一种馅饼可能分给好几人食用,我可以用二分法在0和最大馅饼块之间先求出预设的最大值 ,然后让每种馅饼除以预设的最大值,取整,得到块数,当所有的累加的块数大于总人数的时候,即该值满足题意.
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const double PI = acos(-1.0);
     4 double pie[10005];
     5 
     6 int t,n,f;/*t:次数  n:馅饼的数量  f:朋友数量,因为自己也要分馅饼,所以记得要有 f++*/
     7 bool cmp(double a,double b)
     8 {
     9     return a > b;
    10 }
    11 int judge(double mid)  /*判断预设的最大值是否满足题意*/
    12 {
    13     int sum = 0;
    14     for(int i = 0; i <  n; i++)
    15     {
    16         sum += int(pie[i]/mid);  
    17         if(sum >= f)
    18             return 1;
    19     }
    20     return 0;
    21 }
    22 int main()
    23 {
    24     while(cin>>t)
    25     {
    26 
    27         while(t--)
    28         {
    29             double right,left,mid;
    30             scanf("%d %d",&n,&f);
    31             f++;
    32             for(int i = 0 ;i < n; i++)
    33             {
    34                  scanf("%lf",&pie[i]);
    35                  pie[i] = pie[i]*pie[i]*PI;  /*改为存储pie的体积,方便之后的运算*/
    36             }
    37             sort(pie,pie+n,cmp);    /*排序完成之后 直接拿第一个来开刀*/
    38             left = 0;
    39             right = pie[0];
    40             while(right - left > 1e-7)   
    41             {
    42                 mid = (left+right)/2;
    43                 if(judge(mid))
    44                     left = mid;
    45                 else
    46                     right = mid;
    47             }
    48             printf("%.4lf
    ",mid);
    49         }
    50     }
    51 
    52     return 0;
    53 }

    一些奇奇怪怪的事情:(其实,不是很奇怪,就是取值范围的问题)
    当right-left>1e-5时,输出mid是WA 输出left反而是AC
    当right-left>le-6或者1e-7时 输出mid是AC
    当right - left>1e-8或者更小的时候,就OLE了




  • 相关阅读:
    Spring整合JMS(四)——事务管理
    centos7.3部署django用uwsgi和nginx[亲测可用]
    ImportError: Couldn't import Django.或者提示Django 模块不存在
    ModuleNotFoundError: No module named '_sqlite3'
    django-admin:command not found的解决办法
    2个版本并存的python使用新的版本安装django的方法
    uwsgi的使用
    plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
    cento7.3下玩转sphinx
    一些常用的centos命令,记忆下,属于常用的
  • 原文地址:https://www.cnblogs.com/jj81/p/7405391.html
Copyright © 2011-2022 走看看