zoukankan      html  css  js  c++  java
  • POJ1905Expanding Rods(二分)

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

    题意 :在两堵实心墙中间有一根杆,长度为L,然后给它加热,温度是n,则两墙之间的杆会弯曲,长度会变为L'=(1+n*C)*L,求前后两个状态杆的中心位置的距离

    思路 :一部分几何加上最主要的二分 。这个我发现小优姐写的特别好,分析的也很完美,我就不再多解释了,发一下链接吧http://blog.csdn.net/lyy289065406/article/details/6648562

    #include<iostream>
    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std ;
    const double eps = 1e-8 ;
    int main()
    {
        double l,tem,c ;
        while(scanf("%lf %lf %lf",&l,&tem,&c)!=EOF)
        {
            if(l == -1&&tem == -1&&c == -1)
                break ;
            double s = (1+tem*c)*l ;
            double low = 0.0 ;
            double high = 0.5*l ;
            double mid ;
            while(high - low > eps)
            {
                mid  = (low+high)/2;
                double r = (4*mid*mid+l*l)/(8*mid) ;
                if((2*r*asin(l/(2*r))) < s)
                    low = mid ;
                else high = mid ;
            }
            printf("%.3lf
    ",mid) ;
        }
        return 0 ;
    }
    View Code

    对于代码中对最小精度的规定,不能太小,若是太小的话,循环次数容易增多,会超时,一般到1e-10就是TLE,不过5到8都是0ms过的,所以要注意以下,还有一个要注意的点是二分循环不能直接用<=这样的话会陷入死循环,因为都是double类型的。

  • 相关阅读:
    zznuoj 2173 春天的英雄梦
    zznuoj 2171: 春天的致富梦
    zznuoj 2169: 春天的打水梦
    zznuoj 2168 大家好 我是水题
    西安赛打铁队检讨书
    B-number HDU
    Bomb HDU
    CodeForces
    1140
    Frequent Subsets Problem
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3411580.html
Copyright © 2011-2022 走看看