首页 > 代码库 > POJ 1905(expanding rods)

POJ 1905(expanding rods)

【题意描述】

本题就是给定一个圆棒的热膨胀系数以及膨胀的温度,求最后变弯后中心点与原来中心点的距离。

【思路分析】

几何+二分:

根据公式我们就可以利用二分进行查找了,当然二分是有技巧的,我们由于是double型数据,我们需要在设置循环条件时不能用high-low>0(会陷入系循环)而是需要设置精度esp(1e-5)写成high-low>esp就可以了。

【AC代码】

#include<iostream>#include<math.h>#include<iomanip>using namespace std;#define esp  1e-7int main(){ double l,d,c; while(cin>>l>>d>>c) {     if(l<0&&d<0&&c<0)        break;     if(l==0||c==0||d==0)        cout<<"0.000"<<endl;     else      {        double high=l*0.5;        double low=0.0;        double s=(1+d*c)*l;        double mid;        while(high-low>esp)        {             mid=(high+low)/2;            double  r=(4*mid*mid+l*l)/(8*mid);            double  s1=2*r*asin(l/(2*r));            if(s1<s) low=mid;            else high=mid;        }        double h=mid;        cout<<fixed<<setprecision(3)<<h<<endl;      } } return 0;}