POJ 3122 Pie二分答案

Posted 00isok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3122 Pie二分答案相关的知识,希望对你有一定的参考价值。

<题目链接>

题目大意:

将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
",l*PI);
    }
    return 0;
}

 

 

2018-09-20


以上是关于POJ 3122 Pie二分答案的主要内容,如果未能解决你的问题,请参考以下文章

poj3122 Pie

POJ3122 Pie(二分)

Pie POJ 3122 二分搜索

POJ 3122-Pie(二分+精度)

POJ3122 Pie

poj 3122 Pie