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

Posted caomingpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3122 (集训比赛2B_B题)解题报告相关的知识,希望对你有一定的参考价值。

题目链接: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题)解题报告的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces 551C(集训比赛2B_C题)解题报告

2012金华邀请赛解题报告

济南集训20191001解题报告

[NEFU ACM大一暑假集训 解题报告]前缀和与差分

[NEFU ACM大一暑假集训 解题报告]字典树

POJ 1915(BFS_D题)解题报告