The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemB:Light Bulb
2016-07-14 17:45
471 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3203
题意:求影子的最长长度L;
当灯,人头和墙角成一条直线时(假设此时人站在A点),此时的长度是影子全在地上的最长长度。当人再向右走时,影子开始投影到墙上,当人贴着墙,影子长度即为人的高度。所以当人从A点走到墙,函数是先递增再递减,为凸性函数,所以我们可以用三分法来求解。
我们假设:人距离灯的水平距离为x,则不难推出:随着x的变化,L = D - x + H - D * (H - h) / x; 是先增后减函数。
我们立足于求其最大值。
x的初始值我们可以假设为:D - D*h/H,因为从0开始到此,L肯定是递增的,所以不必考虑先前的。
x最大值为D:
题解参考:http://blog.csdn.net/niuox/article/details/8529986
三分法详细介绍:http://www.debug4.me/Algorithm/ternary-search/
题意:求影子的最长长度L;
当灯,人头和墙角成一条直线时(假设此时人站在A点),此时的长度是影子全在地上的最长长度。当人再向右走时,影子开始投影到墙上,当人贴着墙,影子长度即为人的高度。所以当人从A点走到墙,函数是先递增再递减,为凸性函数,所以我们可以用三分法来求解。
我们假设:人距离灯的水平距离为x,则不难推出:随着x的变化,L = D - x + H - D * (H - h) / x; 是先增后减函数。
我们立足于求其最大值。
x的初始值我们可以假设为:D - D*h/H,因为从0开始到此,L肯定是递增的,所以不必考虑先前的。
x最大值为D:
题解参考:http://blog.csdn.net/niuox/article/details/8529986
三分法详细介绍:http://www.debug4.me/Algorithm/ternary-search/
#include<bits/stdc++.h> using namespace std; double H,h,D; double aa(double x) { return (h-x)*D/(H-x)+x; } int main() { double l,r,m,mm; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf",&H,&h,&D); l=D-D*h/H; r=h; while(l+1e-6<r) { m=(l+r)/2; mm=(m+r)/2; if(aa(m)>aa(mm)) r=mm; else l=m; } printf("%.3lf\n",aa(l)); } return 0; }
相关文章推荐
- The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemA:Second-price Auction
- 剑指offer之面试题22:栈的压入、弹出序列
- Tomcat 7.0 安装 虚拟目录 虚拟主机讲解
- 使用C#验证IOS9产生的ECDSA签名
- Redis安装入门
- The 5th Zhejiang Provincial Collegiate Programming Contest------ProblemA:Accurately Say "CocaCola"!
- jquery发送Ajax(POST方法)
- 文件删除需要管理员权限
- 更新驱动后,Aero特效消失
- 网桥 路由器 网关
- PHP 调用IE执行程序
- The dependency `****` is not used in any concrete target问题解决方案
- javax.json JSON字符串操作
- 阿里云RDS PG实践-阿里云栖-专题视频课程
- javascript判断机器是否联网的2种方法
- java反射详解
- android layout布局的属性介绍
- 如何评估互阻抗放大器(第 1 部分)
- 敏捷设计
- boost::filesystem 库(文件系统)