您的位置:首页 > 其它

计算几何 ural 1753

2012-03-19 12:32 218 查看




题意:求book在下滑过程中,中心距书架左边栏最远距离。


思路:刚开始并没有思路,只是简单的推出:在最开始的时候,book的中心距书架左边栏的距离(简称最左边距)为0,当book的中心与书架左边栏顶部重合时,最左边距也为0.那么最左边距的最大值肯定在这之间产生。搜了别人的题解,了解到三分法。至于什么是三分法,我也是刚了解,只知道,单峰函数三分法,函数在给定定义域内有不超过一个的峰值,可以根据其单峰特性来三分逼近答案。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

#define eps 1e-8

int main()
{
double h, H, l;
scanf("%lf %lf %lf", &h, &H, &l);
H /= 2;
double left, right, tmp, mid1, mid2, ans1, ans2;
left = eps;
tmp = sqrt(H*H - h*h);
if (tmp <= l)
right = tmp;
else
right = l;
while (fabs(right - left) > eps) {
mid1 = (left + right) / 2;
mid2 = (left + mid1) / 2;
ans1 = mid1*H/sqrt(mid1*mid1+h*h) - mid1;
ans2 = mid2*H/sqrt(mid2*mid2+h*h) - mid2;
if (ans1 > ans2)
left = mid2;
else
right = mid1;
}
printf("%.6lf\n", ans1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: