博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三分 --- ZOJ 3203 Light Bulb
阅读量:6596 次
发布时间:2019-06-24

本文共 1258 字,大约阅读时间需要 4 分钟。

 Light Bulb

Problem's Link:   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3203


 

Mean: 

灯的位置固定,而人的位置不固定,求人的影子的最大长度。

 

analyse:

当灯、人的头部、右墙角在同一条直线上时,此时人的影子全部在地板上;当人继续往右走的时候,影子分为地板上的和墙上的,由此可见这是一个先增后减的凸函数,三分取最大值即可。

 

double cal(Type a){    return D-x+H-(H-h)*D/x;}

 

推导过程如下:(运用2次相似三角形)

 

1>k/(D+k) = z/H; ---> k = Dz/(H-z)

 

2>k/(y+k) = z/h; ---> k = zy/(h-z)

 

So D/(H-z) = y/(h-z) ----解出z----> z = H - (H-h)*D/x

 

L = z + y ---> L = D-x+H-(H-h)*D/x;

 

Time complexity: O(n)

 

Source code: 

 

//  Memory   Time//  1347K     0MS//   by : crazyacking//   2015-03-31-21.36#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXN 1000010#define LL long longusing namespace std;double D, H, h;double cal(double x){ return D-x+H-(H-h)*D/x;}int main(){ int T; scanf("%d", &T); while(T--) { scanf("%lf%lf%lf", &H, &h, &D); double left=(H-h)*D/H, right=D, mid, midmid; while(left+1e-9<=right) { mid=(left+right)/2; midmid=(mid+right)/2; if(cal(mid)>=cal(midmid)) right=midmid; else left=mid; } printf("%.3lf\n", cal(mid)); } return 0;}
View Code

 

 

转载于:https://www.cnblogs.com/crazyacking/p/4382158.html

你可能感兴趣的文章
poj 2406 Power Strings
查看>>
hdu 4333 Revolving Digits
查看>>
[转]android开发之字节顺序
查看>>
基数排序:一种多关键字的排序算法,可用桶排序实现
查看>>
Eval与DataBinder.Eval的区别
查看>>
redis持久化探究
查看>>
mysql5.7配置文件(仅供参考)
查看>>
基于 K8S 构建数据中心操作系统
查看>>
Difference between HashMap and Hashtable | HashMap Vs Hashtable
查看>>
刘元普双生贵子(但行好事,莫问前程)
查看>>
Bzoj2186 [Sdoi2008]沙拉公主的困惑
查看>>
阿花宝宝 Java基础笔记 之 继承相关问答题
查看>>
让 Odoo POS 支持廉价小票打印机
查看>>
C#异常重试通用类Retry
查看>>
十五、MySQL DELETE 语句
查看>>
自己写Linux module来收集buddy info
查看>>
MATLAB获取系统时间的方法和格式输出
查看>>
Qt中 QString 转 char*
查看>>
详解Nginx服务器和iOS的HTTPS安全通信
查看>>
解决axios IE11 Promise对象未定义
查看>>