POJ1905-Expanding Rods-二分答案

Posted

tags:

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

一根细棒升温时会变长,在两面墙中间,会变成一个弓形。

给出变长后的长度,求新的细棒中心与没伸长时的中心的距离。

简单的数学推导后就可以二分答案了,一开始没完全掌握二分的姿势,wa了好多。而且poj double输出要用%f,用%lf就wa了。

 

#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const double eps = 1e-5;
double n,c,L;

double func(double x)
{
    //if(fabs(x-0) < eps) return ;
    double r = (x*x+L*L/4.0)/(2*x);
    return 2*r*asin(L/(2.0*r));
}

int main()
{
    while(scanf("%lf%lf%lf",&L,&n,&c))
    {
        if(L<0 && n<0 && c<0)
            break;

        double low = 0.0,high = 0.5*L;
        double mid = (low+high)/2.0;
        double s = (1+n*c)*L;
        double ans = 0;

        while(high-low>eps)
        {
            //printf("%lf %lf %lf\n",low,mid,high);
            //printf("%lf %lf %lf\n",func(low),func(mid),func(high));

            if(func(mid) < s)
                low = mid;
            else
                high = mid;

            mid = (low+high)/2.0;
        }
        //printf("%f %f\n",mid,L);
        printf("%.3f\n",mid);
    }
}

 

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

poj1905 Expanding Rods(二分)

1137 - Expanding Rods

poj3579 二分搜索+二分查找

POJ-3579 Median---二分第k大(二分套二分)

POJ 3685 二分套二分

poj3273 二分