zoukankan      html  css  js  c++  java
  • Openjudge NOI题库 ch0111/05 派

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

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

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

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

    输入
    第一行包含两个正整数N和F,1 ≤ N, F ≤ 10 000,表示派的数量和朋友的数量。
    第二行包含N个1到10000之间的整数,表示每个派的半径。
    输出
    输出每个人能得到的最大的派的体积,精确到小数点后三位。
    样例输入
    3 3
    4 3 3
    样例输出
    25.133
     1 #include <stdio.h>
     2 #include <math.h>
     3 #define maxn 10010
     4 
     5 const double pi=acos(-1.0);
     6 int main()
     7 {
     8     double cakes[maxn];
     9     int c,friends;
    10     int i;
    11     double l,r;
    12     double minc=-1;
    13     double mid;
    14     int ans;
    15     scanf("%d%d",&c,&friends);
    16     friends++;
    17     for(i=0;i<c;i++)
    18     {
    19         scanf("%lf",&cakes[i]);
    20         cakes[i]=pow(cakes[i],2)*pi;
    21         if(minc<cakes[i]) minc=cakes[i];
    22     }
    23     l=0;
    24     r=minc;
    25     while(r-l>0.000001)
    26     {
    27         mid=(l+r)/2;
    28         ans=0;
    29         for(i=0;i<c;i++)
    30             ans+=cakes[i]/mid;
    31         if(ans>=friends) l=mid;
    32         else r=mid;
    33     }
    34     printf("%.3lf",l);
    35     return 0;
    36 }

    这题其实也不难,AC有这几个要点:

    1.π的精度。这里用arccos(-1)实现,比自己输好点

    2.定义ans时用int,防止拼凑派的发生

    3.我也要吃,所以朋友数F还要+1

    4.这类题目普遍的要点,r取最大值

    类似的题目包括网线管理木材切割等。

  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/5041844.html
Copyright © 2011-2022 走看看