题目链接:http://poj.org/problem?id=1905
题目大意:一根某种材料做的直杆被夹在两面墙之间,受热时变长,因两面墙的挤压而向上隆起。长度变化函数为 L'=(1+n*C)*L,给定L,C,n,求向上拱起的高度H
根据上面的公式,二分高度h;
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<map>
#include<queue>
#include<vector>
#include<stack>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
int main()
{
double l,n,c;
while(~scanf("%lf %lf %lf",&l,&n,&c))
{
if(l<0&&n<0&&c<0) break;
double mid;
double s=(1+n*c)*l;
double z=0,y=l+1.0;
while(y-z>1e-5)
{
mid=(z+y)/2;
double r=(4*mid*mid+l*l)/(8*mid);//公式
if(2*r*asin(l/(2*r))<s)
z=mid;
else
y=mid;
}
printf("%.3lf\n",mid);
}
return 0;
}