题意:灯离地面的高度为$H$,人的身高为$h$,灯离墙的距离为$D$,人站在不同位置,影子的长度不一样,求出影子的最长长度。

思路:设人离灯的距离为$x$,当人走到距离灯长度为$L$时,人在墙上的影子消失,此时人再往前走,影子的长度必然会减小,此时的$L$就为三分的左边界,右边界为$R=D$,由形似三角形可以推导出$L=D-\frac{h*D}{H}$,影子的长度

$$f(x)=D-x+H-\frac{(H-h)*D}{x},x\in [D-\frac{h*D}{H},D]$$

在区间$[D-\frac{h*D}{H},D]$三分求极值即可。

#include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; const double eps = 1e-; int t;
double H, h, D; double f(double x)
{
return D - x + H - (H - h) * D / x;
} double three_devide(double l, double r)
{
while (r - l > eps) {
double lmid = (l + r) / ;
double rmid = (lmid + r) / ;
if (f(lmid) < f(rmid)) l = lmid;
else r = rmid;
}
return l;
} int main()
{
scanf("%d", &t);
while (t--) {
scanf("%lf%lf%lf", &H, &h, &D);
double res = f(three_devide(D - h * D / H, D));
printf("%.3lf\n", res);
}
return ;
}

记录一下三分的模板:

求单峰函数的极值时,如果$f(lmid)<f(rmid)$,则令$l=lmid$,否则令$r=rmid$

求单谷函数的极值时,如果$f(lmid)>f(rmid)$,则令$l=lmid$,否则令$r=rmid$

最新文章

  1. IEEE/ACM ASONAM 2014 Industry Track Call for Papers
  2. html与css面试结合工作的总结难点
  3. C/C++与Matlab混合编程
  4. Activity之间数据交流(onActivityResult的用法)
  5. [Js]缓冲运动
  6. MYSQL: Handler_read_%参数说明
  7. Wiz开发 定时器的使用与处理
  8. js函数与变量同名
  9. nORA-01000: 超出打开游标的最大数(SDE连接)
  10. C#中“走马灯”和类似“打地鼠”的小程序(Seventeenth Day)
  11. STL之如何选择顺序容器
  12. css3 文字的设置
  13. css实现背景颜色渐变效果
  14. linux常用命令【原创】
  15. 5.list集合添加姓名{张三,李四,王五,二丫,钱六,孙七},将二丫替换为王小丫, 写入到&quot;D:\\stuinfo.txt&quot;
  16. 剑指Offer-和为S的连续正数序列
  17. 调用微信定位功能 lat _ lng php方法
  18. Vue解决同一页面跳转页面不更新
  19. Python-用户登录三次错误锁定
  20. pythonic语法

热门文章

  1. Paper: ModelarDB
  2. JAVA 注解教程(三)注解的属性
  3. 【转】C# Application.DoEvent()的作用
  4. 第一个Mybatis项目
  5. 二分题 D - Salary Changing codeforce
  6. Flink架构(一)- 系统架构
  7. centos useradd 命令详解
  8. 劳动人民万岁(拒绝惰性)------- 浅谈迭代对象(Iterable) 迭代器(Iterator)
  9. Qt5 error LNK2019 无法解析的外部符号的解决办法
  10. git上传时出现ERROR: Repository not found.的解决办法