题目大意:两墙之前的细杆在加热之后会膨胀,若增加的温度为
n
,膨胀系数为
分析:可以对高度 h 使用二分,由于题目中有一句
Input data guarantee that no rod expands by more than one half of its
original length
所以可以将
代码:
#include <iostream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
const double eps=1e-5;
double l,n,c,L;
bool judge(double h){
double r=(h*h+l*l/4.0)/(2.0*h);
return asin(l/(2.0*r))*r<L/2.0;
}
int main(){
while(cin>>l>>n>>c,l!=-1&&n!=-1&&c!=-1){
L=(1+n*c)*l;
double lb=0,rb=l/2,mid;
while(rb-lb>eps){
mid=(lb+rb)/2;
if(judge(mid)) lb=mid;
else rb=mid;
}
cout<<fixed<<setprecision(3)<<mid<<endl;
}
}