ZOJ 3203 Light Bulb
2016-01-19 18:10
225 查看
很明显这是一道水题。
稍有经验的CMO退役选手(233)都可以在O(1)的时间内做出来。
不过嘛,我刚学了三分法。(话说我人生中的第一道三分题为什么要选这么水的)
于是就要拿三分来水一水这道题。
以前一直觉得三分是很高端的东西。
看了下才发现(゚ー゚)和二分比就多了一点。。。。。
二分是l,r,mid=(l+r)/2,三分是l,r,mid=(l+r)/2,midmid=(mid+r)/2,等于是将二分中右边的区间再分了一下。
于是就可以求极值了。
然后这题的话列个等式算出影子长度的表达式,三分一下就可以了。(感觉学了富比尼原理之后整个人做数学题的思路大不同了)
稍有经验的CMO退役选手(233)都可以在O(1)的时间内做出来。
不过嘛,我刚学了三分法。(话说我人生中的第一道三分题为什么要选这么水的)
于是就要拿三分来水一水这道题。
以前一直觉得三分是很高端的东西。
看了下才发现(゚ー゚)和二分比就多了一点。。。。。
二分是l,r,mid=(l+r)/2,三分是l,r,mid=(l+r)/2,midmid=(mid+r)/2,等于是将二分中右边的区间再分了一下。
于是就可以求极值了。
然后这题的话列个等式算出影子长度的表达式,三分一下就可以了。(感觉学了富比尼原理之后整个人做数学题的思路大不同了)
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const double eps=1e-6; double D,H,h; double f(double x){ return (D*h-H*x)/(D-x)+x; } int main(){ int T;scanf("%d",&T); while(T--){ scanf("%lf%lf%lf",&H,&h,&D); double l=0,r=D*h/H,m,mm,ans1=0,ans2=1; while(fabs(ans1-ans2)>eps){ m=(l+r)/2; mm=(m+r)/2; ans1=f(m);ans2=f(mm); if(ans1>ans2)r=mm; else l=m; } printf("%.3lf\n",ans1); } return 0; }
相关文章推荐
- MJRefresh在pod管理下的一个坑
- Android基本布局解析
- 线性表之静态链表
- 免费小说分享—《异界之九阳真经》
- Exchange 2013恢复已禁用用户邮箱
- xcode7 创建新工程,兼容http
- Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命
- Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命
- 关于Apacheserver的訪问控制
- RTP协议
- java使用poi导出excel设置颜色问题
- NonSerialized 与 HideInInspector
- 如何在jQuery的Ajax调用后管理一个重定向请求
- android studio 将已有的项目 以module Library的 形式引入到 自己的项目中
- tips
- 清空input file 的值
- android EditText的美化
- H2内存数据库 支持存储到文件
- 程序猿,千万别说你不了解Docker!
- 清空input file 的值