ZOJ 3203 灯泡
2018-08-26 17:16:48来源:博客园 阅读 ()
题面
相比 wildleopard 的家,他的弟弟 mildleopard 比较穷。他的房子是狭窄的而且在他的房间里面仅有一个灯泡。每天晚上,他徘徊在自己狭小的房子里,思考如何赚更多的钱。有一天,他发现他的影子的长度随着他在灯泡和墙壁之间走到时发生着变化。一个突然的想法出现在脑海里,他想知道他的影子的最大长度。
思路
首先,分治肯定是能够想到的,但是是二分还是三分呢,我们只需要思考一下就能知道,我们设地上影长为L1,墙上为L2,人走近时L1增加,L2减小,走远时L1减小,L2增加——这是个二次函数,所以一定使用三分法。
然后让我们来算L的长度,首先L1=D-X(X为人到左墙距离),L2=H-(H-h)*D/X(相似三角形)。
如果不理解可看下图 ,两个蓝的三角形为相似三角形,对应边的比值相同。
然后三分一下x的范围即可。
代码
1 (我都讲得这么详细了还需要代码?) 2 #include<bits/stdc++.h> 3 using namespace std; 4 double H,h,D,mid1,mid2; 5 int t; 6 double check(double x) 7 { 8 return D-x+H-(H-h)*D/x; 9 } 10 int main() 11 { 12 cin>>t; 13 while (t--) 14 { 15 cin>>H>>h>>D; 16 double l=(H-h)*D/H,r=D;//注意l要从(H-h)*D/H开始,不然墙上没有影子。 17 while (l+1e-10<=r) 18 { 19 mid1=(l+r)/2; 20 mid2=(mid1+r)/2; 21 if (check(mid1)>=check(mid2)) r=mid2;else l=mid1; 22 } 23 printf("%.3lf\n",check(mid1)); 24 } 25 return 0; 26 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:NOIP2015 T4 推销员
- bzoj3569 DZY Loves Chinese II 2020-05-25
- bzoj4036 [HAOI2015]按位或 2020-04-26
- 「BZOJ4173」数学 2020-01-15
- bzoj3944 Sum 2019-12-25
- yzoj 2372 小B的数字 题解 2019-10-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash