码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3122 Pie【二分答案】

时间:2018-09-21 00:34:01      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:class   ble   for   +=   algo   i++   题目   并且   链接   

<题目链接>

题目大意:

将n个半径不一但是高度为1的蛋糕分给 F+1个人,每个人分得蛋糕的体积应当相同,并且需要注意的是,每个人分得的整块蛋糕都只能从一个蛋糕上切下来,而不是从几个蛋糕上东拼西凑而成。现在问每人分得蛋糕的体积是多少。

解题分析:
就是普通的二分答案,但是要注意一下浮点型二分的结构,与整型二分略有不同。

 

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const double PI=acos(-1.0);
int n,m,arr[10010];
const double eps=1e-6;

bool juge(double x){
    int sum=0;
    for(int i=1;i<=n;i++){
        sum+=(int)(arr[i]/x);   //当每个人得到x体积蛋糕时,最多能够分给几个人
    }
    return sum>=(m+1); 
}

int main(){
    int T;scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        int maxv=-0x3f;
        for(int i=1;i<=n;i++){
            scanf("%d",&arr[i]);
            arr[i]*=arr[i];      //先只进行半径的平方,不乘上pi,防止损失精度
            maxv=max(maxv,arr[i]);
        }
        double l=0,r=maxv*1.0;
        while(r-l>eps){    
            double mid=(l+r)/2;
            if(juge(mid))l=mid;
            else r=mid;
        }
        printf("%.4lf\n",l*PI);
    }
    return 0;
}

 

 

2018-09-20

POJ 3122 Pie【二分答案】

标签:class   ble   for   +=   algo   i++   题目   并且   链接   

原文地址:https://www.cnblogs.com/00isok/p/9684043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!