题目链接
题意:有n个蛋糕和f+1个人(加上自己),把总共分层f+1块蛋糕,每块蛋糕都一样大。每个人自己分到的蛋糕都从一块蛋糕中得到。从0到蛋糕最大体积二分找到答案即可。

注意:PI要取到小数点后11位,不然会WA。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const double PI=3.14159265359;
const int N=1e4+10;
double a[N];
int n,f;
int check(double x){
    int sum=0;
    for(int i=0;i<n;i++)
        sum+=(int)(a[i]/x);
    return sum;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d %d",&n,&f);
        f++;//要加上自己
        double x,mx=0;
        for(int i=0;i<n;i++){
            scanf("%lf",&a[i]);
            a[i]*=a[i]*PI;
            mx=max(mx,a[i]);
        }
        double l=0.0,r=mx;
        const double eps=1e-6;
        while(r-l>eps){
            double mid=(l+r)/2;
            if(check(mid)<f)r=mid;
                else l=mid;
        }
        printf("%.4f\n",l);
    }
    return 0;
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐