HDU 1969

二分搜索答案

注意PI的精度........

#include <stdio.h>
#define eps 1e-7
int n,f;
double ri[10005];
int test(double d){
    int k=0,i;
    for(i=0;i<n;i++){
        if(ri[i]>=d)k+=(int)(ri[i]/d);
        if(k>=f)return 1;
    }
    return 0;
}
int main(){
    int t,i;
    double min=0,max=0,d;
    scanf("%d",&t);
    while(t--){
        scanf("%d %d",&n,&f);
        f++;
        min=0;
        max=0;
        for(i=0;i<n;i++){
            scanf("%lf",&ri[i]);
            if(ri[i]>max){max=ri[i];}
            ri[i]=ri[i]*ri[i];
        }
        max*=max;
        while(max-min>eps){                    //二分法,搜索答案,
            d=(min+max)/2;
            if(test(d))min=d;
            else max=d;
        }
        printf("%.4lf ",d*3.14159265358979323846);            //看discuss里说的,,,,第一次用,MATH_PI编译错误了
    }
    return 0;
}

原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3855175.html