【POJ】3122 Pie [二分查找]

题目地址:http://poj.org/problem?id=3122

 二分每块饼的体积。为了保证精度,可以先二分半径的平方r*r,最后再乘以PI。要注意一点,要分的人数要包括自己,及f+1。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1e4+11;
const double PI = acos(-1.0);
const double EPS = 1e-6;
int n,m;
double a[N];
double INF;

void init()
{
    INF=0;
}

int check(double x)
{
    int cnt=0;
    for(int i=0;i<n;i++){
        cnt+=(int)a[i]/x;
    }
    return cnt;
}
double BinSearch(double* a)
{
    double head=0, tail=INF;
    double mid;
    
    while(head+EPS<tail){
        mid=(head+tail)/2.0;
        if(check(mid)<m){
            tail=mid;
        } else {
            head=mid;
        }
    }
    return mid;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        init();
        scanf("%d%d",&n,&m);
        m++;
        for(int i=0;i<n;i++){
            scanf("%lf",&a[i]);
            a[i]=a[i]*a[i];
            if(a[i]>INF) INF=a[i];
        }
        printf("%.4f\n",BinSearch(a)*PI);        
    }
    
    return 0;
}

 

posted @ 2017-03-06 20:52  SXISZERO  阅读(266)  评论(0编辑  收藏  举报