zoukankan      html  css  js  c++  java
  • OpenJudge 1.11.05 派

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

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

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

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

    输入
    第一行包含两个正整数N和F,1 ≤ N, F ≤ 10 000,表示派的数量和朋友的数量。
    第二行包含N个1到10000之间的整数,表示每个派的半径。
    输出
    输出每个人能得到的最大的派的体积,精确到小数点后三位。
    样例输入
    3 3
    4 3 3
    样例输出
    25.133


    #include<iostream>
    #include<cmath>
    #include<cstdio>
    using namespace std;
    int n,f;
    double l,r,s;
    long double a[100001];
    const double pi=acos(-1.0);
    int js(long double x)
    {
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            if(ans>=f+1) return 0;
            else
            {
                ans+=floor(a[i]/x);
            }
        }
        if(ans<f+1) return 1;
        return 0;
    }
    int main()
    {
        cin>>n>>f;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            a[i]=a[i]*a[i]*pi;
            if(a[i]>r) r=a[i];
        }
        while(r-l>1e-5)
        {
            long double m=(l+r)/2;
            if(js(m)) r=m;
            else l=m;
        }
        printf("%.3lf",r);
    }
  • 相关阅读:
    终于回来了&&邮递员送信
    发射站
    黑匣子
    利维坦——(1)
    预告
    整除(水题)
    BZOJ054_移动玩具_KEY
    BZOJ4034_树上操作_KEY
    树链剖分学习&BZOJ1036
    BZOJ1208_宠物收养所_KEY
  • 原文地址:https://www.cnblogs.com/chen74123/p/7020007.html
Copyright © 2011-2022 走看看