题目

源地址:

http://poj.org/problem?id=1905

理解

很久以前做的题目,是二分法最基础的运用。

代码

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;


double esp = 1e-5;
int main()
{
    double L, n, C;
    while (scanf("%lf%lf%lf", &L, &n, &C) != EOF)
    {
        if (L < 0 && n < 0 && C < 0)
            break;
        double LL;
        LL = (1 + n * C) * L;
        double low, high;
        double R, mid;
        low = 0;
        high = L / 2;
        while (high - low > esp)
        {
            mid = (high + low) / 2;
            R = ((mid * mid * 4) + (L * L)) / (8 * mid);
            if ((2 * R * asin(L / (2 * R))) < LL)
                low = mid;
            else
                high = mid;
        }
        printf("%.3f\n", mid);
    }
    return 0;
}

更新日志

  • 2014年07月23日 已AC。