【Light】[1137]Expanding Rods

这里写图片描述
这里写图片描述

可推出关于圆弧半径r和h的方程

r2(l2)2+h=r
2arsin(l2r)r=l

由①式可化简出
r=h2+l242h
代入②式中可求出l’

把其与根据题目数据求出的l’比较
可得到mid与res的比较关系
从而可以进行二分查找

#include<stdio.h>
#include<math.h>
double L,n,c;
bool judge(double m) {
    double t=(m*m+L*L/4.0)/m/2.0;
    if(2*asin(L/2.0/t)*t>=(1+n*c)*L)
        return true;
    else
        return false;
}
int main() {
    int T,kase=0;
    scanf("%d",&T);
    while(T--) {
        scanf("%lf %lf %lf",&L,&n,&c);
        double l=0,r=L;
        while(r-l>1e-8) {
            double mid=(l+r)/2;
            if(judge(mid))
                r=mid;
            else
                l=mid;
        }
        printf("Case %d: %.8lf\n",++kase,r);
    }
    return 0;
}

题目地址:【Light】[1137]Expanding Rods

posted @ 2016-07-26 18:20  BoilTask  阅读(9)  评论(0编辑  收藏  举报