[ZOJ 3203] 灯泡
今天这个**又带着题走来了!!
文章目录
- @[TOC] 题目
- 题解
- 代码实现
题目
相比 wildleopard 的家,他的弟弟 mildleopard 比较穷。他的房子是狭窄的而且在他的房间里面仅有一个灯泡。每天晚上,他徘徊在自己狭小的房子里,思考如何赚更多的钱。有一天,他发现他的影子的长度随着他在灯泡和墙壁之间走到时发生着变化。一个突然的想法出现在脑海里,他想知道他的影子的最大长度。
输入格式
输入文件的第一行包含一个整数 T ,表示测试数据的组数。
对于每组测试数据,仅一行,包含三个实数H ,h 和 D,H 表示灯泡的高度, h表示 mildleopard 的身高, D表示灯泡和墙的水平距离。
输出格式
输出文件共 T 行,每组数据占一行表示影子的最大长度,保留三位小数。
样例
样例输入
3
2 1 0.5
2 0.5 3
4 3 4
样例输出
1.000
0.750
4.000
题解
首先看这种题,明显在一定区间求最值,那么一定是某分,是二分还是三分呢?
我们来想一想,无非影子有两种情况:还有一种是根本跟墙贴着了,这里不再考虑
1)当影子没有被折射到墙上时:当这种情况时H与h之间的距离越远影子越长
2)当有一部分影子被折射到墙上时:当这种情况时,H与h距离越远影子越短,
悄咪咪告诉你还涉及到三角函数,
经过分析后,我们能发现转折点就是影子长刚好要折射到墙上的那一个点
这个函数图像不再是一个一次函数,而是一个抛物线,因而我们确定了这道题属于三分!
好了,三分模板相信大家都会,不会的可以看看我之前写的三分入门博客
三分模板传送门
接着我们就要来计算这个影子长,很明显这道题要用到我们的三角函数兄dei
这个题,由于本仙女接触的三角函数数学题多了,自然就想到了建坐标系,
具体如下:
我们三分的范围也就是[0,D],含义:H与h之间的距离ip
那么以D为x轴,H为y轴,坐标也就出来了:
A(0,H),B(ip,h)
情况1解决:
如果影子木有被折射到墙上,
简单的待定系数求和y=kx+b,求出直线AB解析式,再另y=0,解出x
答案就是x减掉距离ip
情况2解决:如上方图
我们要求的就是GH+HC,
首先按照上面情况一的做法解出x,GH=D-ip,P(x,0)
那么PH=x-D,
接下来要运用的就是tan α,得到CH,
三角函数往往又跟相似挂钩,这里我们就用相似来解决三角函数
△CHP∽△AOP,很容易就得到这个了
那么根据相似比相等的性质,我们可以得出CH/AO = HP/OP
即CH=HP/OP * AO = ( x - D ) / x*H
以上就是写在三分中check函数的东西。话不多说,屁不多放,上马!
代码实现
#include <cstdio>
#define eps 1e-5
int t;
double H, h, D;
double id;double count ( double ip ) {double k = ( h - H ) / ( D - ip );double x = - ( H / k );if ( x > D ) return ip + ( x - D ) / x * H;else return x - D + ip;
}void solve ( double l, double r ) {if ( r - l <= eps ) {id = l;return;}double mid1 = l + ( r - l ) / 3.0;double mid2 = r - ( r - l ) / 3.0;if ( count ( mid1 ) > count ( mid2 ) )solve ( l, mid2 );elsesolve ( mid1, r );
}int main() {scanf ( "%d", &t );while ( t -- ) {scanf ( "%lf %lf %lf", &H, &h, &D );solve ( 0, D );printf ( "%.3lf\n", count ( id ) );}return 0;
}
好了,是不是觉得代码量很少啊,是不是so easy啊!!我也就只讷做出介种题~~
那个**带着神马玩意儿又走了,有事请留言致电139红酒白酒葡萄鸡尾酒~~
[ZOJ 3203] 灯泡相关推荐
- ZOJ -3203 三分+数学
题意: 给出光的高度,人的高度,还有屋子的宽度 本题就是要求人站在什么地方影长最长 输出最长的影长 数学题 可以把这道题的分段公式推出来 然后分类讨论x在不同的范围获得不同的大小 或者把影长公式推出来 ...
- #10016. 「一本通 1.2 练习 3」灯泡
[题目描述] 原题来自:ZOJ 3203 相比 wildleopard 的家,他的弟弟 mildleopard 比较穷.他的房子是狭窄的而且在他的房间里面仅有一个灯泡.每天晚上,他徘徊在自己狭小的房子 ...
- 浙江省第6届程序设计竞赛结题报告汇总 zoj3202-3212
zoj 3202 Second-price Auction 水题,不解释了,直接贴代码 #include<cstdio> #include<cstring> #include& ...
- 三分法求解凸函数的最值
转了牛人的: 二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值.但当函数是凸性函数时,二分法就无法适用,这时三分法就可以"大显身手"-- 如图,类似二分的定义Left ...
- 和菜鸟一起学算法之三分法求极值问题
午后的阳光,那么灿烂,如果不是温度过高,那么去西湖看看风景还是不错的.想着,现在西湖边应该是平静的湖面,加上无数知了在柳枝上演奏着交响曲吧.小看了下非诚勿扰,那男生为了女孩唐静付出了7年,唉,可是他错 ...
- 【专题】三分法和牛顿迭代法总结
下面总结两种迭代方法:三分法和牛顿迭代 1.三分法 二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值.但当函数是凸性函数时,二分法就无法适用,这时三分法就可以大显身手. 如下凸函数: 类 ...
- 技巧专题1(二分、三分、位运算)
二分 二分答案一般有以下的一些特征: A. 候选答案在区间[min,max]上按照某种属性有序,一般枚举复杂度较高. B. 容易判断某个点是否为可行 最大值最小. 判断一个东西是否在一个有序集合中出现 ...
- ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...
- zoj 1204 Additive equations
ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...
最新文章
- Windows窗口的建立
- 新闻与传播c刊_周二刊、周刊、旬刊、季刊……大辨析
- C# 设置Word文档保护(加密、解密、权限设置)
- 虚拟机 centos 6.5 扩展根目录分区大小
- plist 文件的读写
- C++11多线程之future和promise
- [待总结]redmine
- permutations python_为什么Python的itertools.permutations包含重复项? (当原始列表重复时)...
- [恢]hdu 1019
- Unity3D之UGUI基础5:Toggle复选框
- Java 学习之集合类(Collections)
- 【云原生】设备入云之FlexManager数据通道的具体部署
- 转:MySQL 的 my.cnf 文件(解决 5.7.18 下没有 my-default.cnf )
- erwfgergve
- .net微信 验证 Token完整代码
- 什么是网页源代码和网站的源代码
- 信号量(Semaphore)、闭锁(Latch)、栅栏(Barrier)
- VBA word 常用代码及注释
- elasticsearch—索引与检索(一)
- SQLServer通过sql修改表主键
热门文章
- golang防止MySQL注入_mysql – 如何最大限度地降低golang服务中下游服务中SQL注入的风险?...
- sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句
- python可视化工具好用_6款Python必备的可视化工具推荐
- lol战绩查询接口_LOL:莫名其妙被封号?3把躺赢局被说是代打
- 中设置colorbar_【值得收藏】如何画出学术论文中需要的各种精美插图,看这一篇就够了!...
- 数据结构——模式匹配kmp算法
- Android切换泰语,Android应用内切换语言
- mysql权限create细化_mysql权限精细化分配-阿里云开发者社区
- 数据结构 - 最小堆最大堆
- leetcode1005. K 次取反后最大化的数组和