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

POJ 3122 (集训比赛2B_B题)解题报告

时间:2018-01-27 11:21:47      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:style   1.0   blank   一个   hid   problem   面积   int   gif   

题目链接:http://poj.org/problem?id=3122

--------------------------------------------------------

题意:每人只能从一个派里面切割,要求每个人的派的面积相等,求这个最大面积。

思路:二分法,下限是所有人从最小的里面切割,上限是所有派都完全分割。每次进行二分,判断解是否可行,通过可行性,对上下限进行调整,最终得到结果。

代码:

技术分享图片
#include <cstdio>
#include <cmath>

int N =0;
int F=0;
double pim =0;
double sum=0;
const int MAXN =10000+10;
double r[MAXN];
double pie[MAXN];

const double PI =acos(-1.0);
const double eps=1e-6;

int jud(double mid){
    int count=0;
    for(int i=0;i<N;i++){
        count+=(int)(pie[i]/mid);
    }
    if(count>=(F+1))    return 1;    
    else return  0;
}
double proce(){
    double left =pim/(F+1);
    double right=sum/(F+1);
    double mid= (left+right)/2;
    while(right-left>eps){
        mid= (left+right)/2;
        if (jud(mid)){
            left = mid;
        }else{
            right =mid;
        }
    }

    return mid;
}

int main(void){
    int T=0;
    scanf("%d",&T);

    for(int i=0;i<T;i++){
        pim=0;
        sum=0;
        scanf("%d %d",&N,&F);
        for(int j=0;j<N;j++){
            scanf("%lf",&r[j]);
            pie[j]=PI*r[j]*r[j];
            if(pie[j]>pim)    pim=pie[j];
            sum+=pie[j];
        }
        double ans = proce();
        printf("%.4f\n",ans);
    }
    
        
    return 0;
}
View Code

 

POJ 3122 (集训比赛2B_B题)解题报告

标签:style   1.0   blank   一个   hid   problem   面积   int   gif   

原文地址:https://www.cnblogs.com/caomingpei/p/8362035.html

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