zoukankan      html  css  js  c++  java
  • 01派【北京大学ACM/ICPC竞赛训练暑期课】

    01:派

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成;可以是一整个派)。

    我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和其他人的同样大小。

    请问我们每个人拿到的派最大是多少?每个派都是一个高为1,半径不等的圆柱体。

    输入
    第一行包含两个正整数N和F,1 ≤ N, F ≤ 10 000,表示派的数量和朋友的数量。
    第二行包含N个1到10000之间的整数,表示每个派的半径。
    输出
    输出每个人能得到的最大的派的体积,精确到小数点后三位。
    样例输入
    3 3
    4 3 3
    样例输出
    25.133
     1 #include<cstdio>
     2 #include<cmath>
     3 using namespace std;
     4 const double PI = acos(-1.0);
     5 double a[10010];//放派的体积
     6 
     7 int main()
     8 {
     9     int N,F;
    10     scanf("%d %d",&N,&F);
    11     
    12     double maxV = 0;
    13     double s = 0,e = 0;
    14     for(int i = 0; i< N;++i)
    15     {
    16         int r ;
    17         scanf("%d",&r);
    18         a[i] = PI*r*r;
    19         if(a[i] > e)
    20         {
    21             e = a[i];
    22         }
    23     }
    24     while(fabs(e-s) > 1e-5)//while(s!=e)
    25     {
    26         int num = 0;
    27         double mid = s+(e-s)/2;
    28         for(int i = 0; i< N;++i)
    29         {
    30             num += floor(a[i]/mid);//可以切出来的块数 
    31         }
    32 
    33         if(num > F)//切小了 
    34         {
    35             s = mid; 
    36         }
    37         else//切大了 
    38         {
    39             e = mid;
    40         }
    41     }
    42     printf("%.3lf",e);
    43     return 0;
    44  } 
  • 相关阅读:
    获取最外层View
    Activity的lanuchmode
    decorview that was originally added here or java.lang.IllegalArgumentException: View not attached to window manager
    Android开源项目
    Android屏幕适配
    android获取根视图
    Nginx 安装 和 特性介绍
    kubernetes Pod控制器
    kubernetes 资源清单定义入门
    kubernetes 应用快速入门
  • 原文地址:https://www.cnblogs.com/knmxx/p/9393602.html
Copyright © 2011-2022 走看看