|

楼主 |
发表于 2018-2-4 17:43:58
|
显示全部楼层
解析:https://www.cnblogs.com/SinGuLaRiTy2001/p/7171242.html#_label0
之所以可以使用分治策略中的二分渐进法,是由于偏移的距离与角度成正比,有单调性。
- #include<cstdio>
- #include<cmath>
- using namespace std;
- #define eps 1e-4
- double l,ll,n,c,r,sita;//l-棍长 n-温度 c-膨胀常量 ll-弧长 r-半径 sita-对应角
- double solve(double a,double b) //二分渐进法
- {
- double left,right,mid;
- left=a;
- right=b;
- while(left+eps<right)
- {
- mid=(left+right)/2;
- r = l*l/8/mid+mid/2;
- sita = 2*asin(l/2/r);
- if(sita*r>ll) // ll=sita*r l=sin(sita)*r
- right=mid;
- else
- left=mid;
- }
- return left;
- }
- int main()
- {
- while(scanf("%lf%lf%lf",&l,&n,&c))
- {
- if(l<0||n<0||c<0)break;
- ll=l*(1+n*c);
- printf("%.3f",solve(0,l/2));
- }
- }
复制代码 |
|