zoukankan      html  css  js  c++  java
  • POJ 1905 Expanding Rods#二分

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

    题意:将一条直线变成一条弧线(该弧线是圆的一部分),求中心位置发生的位移。

              由于精度需要控制好,所以选择用圆半径作为二分的目标,l=0,r=INF,LL为弧线长度,根据半径mid以及弦长L,可以求出对应的弧线长度t=2*asin(0.5*L/mid)*mid,再与LL比较,若t<LL,说明半径取大了,故r=mid,继续二分。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    #define INF 10e8
    
    int main()
    {
        double L,n,C;
        while(~scanf("%lf%lf%lf",&L,&n,&C))
        {
            if(L==-1&&n==-1&&C==-1)
                break;
            if(n*C<0.000001)
            {
                printf("0.000
    ");
                continue;
            }
            double LL=(1+n*C)*L;
            double mid,l=0,r=INF,t;
            while(l+1e-6<r)
            {
                mid=(l+r)/2;
                t=2*asin(0.5*L/mid)*mid;
                if(t<LL)
                    r=mid;
                else l=mid;
            }
            double ans=mid-sqrt(mid*mid-(L*L)/4);
            printf("%.3lf
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Python学习-if条件语句
    Python学习-变量
    认识Python
    win7分盘
    mysql环境变量配置
    mysql的下载及配置
    c# excel xls保存
    js 在线引用
    js layer.js
    vue day3 bootstrap 联动下拉
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5290244.html
Copyright © 2011-2022 走看看