信息学奥赛一本通 1438:灯泡 | 洛谷 P5931 [清华集训2015] 灯泡

【题目链接】

ybt 1438:灯泡
洛谷 P5931 [清华集训2015] 灯泡

【题目考点】

1. 三分 求函数极值
2. 相似三角形
3. 对钩函数

【解题思路】

首先考虑影子还没有到达对面墙壁的情况
在这里插入图片描述
记BM长度为x,影子为AM,长度为L。三角形ABC相似于三角形AMN。因此有:
A M A B = N M C B \frac{AM}{AB}=\frac{NM}{CB} ABAM=CBNM
L x + L = h H \frac{L}{x+L} = \frac{h}{H} x+LL=Hh
h x + h L = L H hx+hL=LH hx+hL=LH
h x = L ( H − h ) hx=L(H-h) hx=L(Hh)
L = h H − h x L=\frac{h}{H-h}x L=Hhhx
随着x的增大,L增大。在影子只在地面上的前提下,x最大时, x + L = D x+L=D x+L=D
由于 x = H − h h L x=\frac{H-h}{h}L x=hHhL
所以 D = x + L = H − h h L + L = H h L D=x+L=\frac{H-h}{h}L+L=\frac{H}{h}L D=x+L=hHhL+L=hHL
L = h H D L=\frac{h}{H}D L=HhD
此时 x = D − L = H − h H D x=D-L=\frac{H-h}{H}D x=DL=HHhD
即当影子只在地面上时,当 x = H − h H D x=\frac{H-h}{H}D x=HHhD时,影子长度最大,为 L = h H D L=\frac{h}{H}D L=HhD
在这里插入图片描述
当影子可以打到墙壁上时
MA和AE都是影子,影子总长为L。
其中BM为x,x最小为 x = H − h H D x=\frac{H-h}{H}D x=HHhD。MA为D-x,因此墙壁上影子长度 A E = L − D + x AE=L-D+x AE=LD+x
三角形EGN和三角形EFC相似,因此
N G C F = E G E F \frac{NG}{CF}=\frac{EG}{EF} CFNG=EFEG
N M − M G C B − B F = E G E F \frac{NM-MG}{CB-BF}=\frac{EG}{EF} CBBFNMMG=EFEG
h − L + D − x H − L + D − x = D − x D \frac{h-L+D-x}{H-L+D-x}=\frac{D-x}{D} HL+DxhL+Dx=DDx

D h − D L + D 2 − D x = D H − D L + D 2 − D x − H x + L x − D x + x 2 Dh-DL+D^2-Dx=DH-DL+D^2-Dx-Hx+Lx-Dx+x^2 DhDL+D2Dx=DHDL+D2DxHx+LxDx+x2
D h = D H − H x + L x − D x + x 2 Dh=DH-Hx+Lx-Dx+x^2 Dh=DHHx+LxDx+x2
L x = − x 2 + ( H + D ) x + D h − D H Lx=-x^2+(H+D)x+Dh-DH Lx=x2+(H+D)x+DhDH
L = − x − D ( H − h ) x + H + D L=-x-\frac{D(H-h)}{x}+H+D L=xxD(Hh)+H+D
f ( x ) = − x − D ( H − h ) x + H + D f(x)=-x-\frac{D(H-h)}{x}+H+D f(x)=xxD(Hh)+H+D x ∈ [ H − h H D , D ] x\in [\frac{H-h}{H}D, D] x[HHhD,D]
该函数是对钩函数,在 x ∈ [ 0 , + ∞ ] x\in [0, +\infty] x[0,+]范围内会先单调递增,再单调递减,也就是单峰函数。

对f(x)求导,得: f ′ ( x ) = D ( H − h ) x 2 − 1 f'(x)=\frac{D(H-h)}{x^2}-1 f(x)=x2D(Hh)1
x ∈ [ 0 , + ∞ ] x\in [0, +\infty] x[0,+]中的极值点,使 D ( H − h ) x 2 − 1 = 0 \frac{D(H-h)}{x^2}-1=0 x2D(Hh)1=0 x 0 = D ( H − h ) x_0=\sqrt{D(H-h)} x0=D(Hh)
x < x 0 x<x_0 x<x0时, f ′ ( x ) > 0 f'(x)>0 f(x)>0,函数单调递增
x > x 0 x>x_0 x>x0时, f ′ ( x ) < 0 f'(x)<0 f(x)<0,函数单调递减
x = x 0 x=x_0 x=x0时, f ′ ( x ) = 0 f'(x)=0 f(x)=0,函数有极值点。

由于 f ( x ) f(x) f(x) x ∈ [ 0 , + ∞ ] x\in [0, +\infty] x[0,+]范围内是单峰函数,那么在其子区间 x ∈ [ H − h H D , D ] x\in [\frac{H-h}{H}D, D] x[HHhD,D]内, f ( x ) f(x) f(x)可以是单调函数或单峰函数。
接下来有两种方法:

解法1:三分
  • 如果f(x)是单峰函数,使用三分算法可以求出函数的极大值,也是最大值。
  • 如果f(x)是单调函数,使用与上述相同的三分算法可以求出函数的最大值。

因此,使用三分算法求出 f ( x ) f(x) f(x)在区间 x ∈ [ H − h H D , D ] x\in [\frac{H-h}{H}D, D] x[HHhD,D]中的最大值,就是L的最大值。

解法2:数学求函数区间最值

已知 f ( x ) = − x − D ( H − h ) x + H + D f(x)=-x-\frac{D(H-h)}{x}+H+D f(x)=xxD(Hh)+H+D x ∈ [ 0 , + ∞ ] x\in [0, +\infty] x[0,+]范围内是单峰函数,极值点 x 0 = D ( H − h ) x_0=\sqrt{D(H-h)} x0=D(Hh) ,要想求的是 x ∈ [ H − h H D , D ] x\in [\frac{H-h}{H}D, D] x[HHhD,D]中的最大值。

  • 如果 x 0 < H − h H D x_0< \frac{H-h}{H}D x0<HHhD,那么函数在 [ H − h H D , D ] [\frac{H-h}{H}D, D] [HHhD,D]范围内是单调递减的,最大值点是 H − h H D \frac{H-h}{H}D HHhD,最大值是 f ( H − h H D ) = h H D f(\frac{H-h}{H}D)=\frac{h}{H}D f(HHhD)=HhD
  • 如果 x 0 > D x_0> D x0>D,那么函数在 [ H − h H D , D ] [\frac{H-h}{H}D, D] [HHhD,D]范围内是单调递增的,最大值点是 D D D,最大值是 f ( D ) = h f(D)=h f(D)=h
  • 如果 H − h H D ≤ x 0 ≤ D \frac{H-h}{H}D\le x_0 \le D HHhDx0D,那么函数在 [ H − h H D , D ] [\frac{H-h}{H}D, D] [HHhD,D]范围内是单峰函数,最大值点就是极大值点 x 0 x_0 x0,最大值为 f ( x 0 ) = H + D − 2 D ( H − h ) = H + D − 2 x 0 f(x_0)=H+D-2\sqrt{D(H-h)}=H+D-2x_0 f(x0)=H+D2D(Hh) =H+D2x0

【题解代码】

解法1:三分
#include<bits/stdc++.h>
using namespace std;
double H, h, D;
double f(double x)
{
	return -x-D*(H-h)/x+H+D;
}
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		cin >> H >> h >> D;
		double l = (H-h)*D/H, r = D;
		while(r-l > 1e-10)
		{
			double lm = l+(r-l)/3, rm = r-(r-l)/3;
			if(f(lm) < f(rm))
				l = lm;
			else
				r = rm;
		}
		cout << fixed << setprecision(3) << f(l) << endl;
	}
	return 0;
}
解法2:数学求函数区间最值
#include<bits/stdc++.h>
using namespace std;
int main()
{
	double H, h, D, ans;
	int t;
	cin >> t;
	while(t--)
	{
		cin >> H >> h >> D;
		double x0 = sqrt(D*(H-h));
		if(x0 < (H-h)*D/H)
			ans = h*D/H;
		else if(x0 > D)
			ans = h;
		else
			ans = H+D-2*x0;
		cout << fixed << setprecision(3) << ans << endl;
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/938763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭开 Choerodon UI 拖拽功能的神秘面纱

01 引言 系统的交互方式主要由点击、选择等组成。为了提升 HZERO 系统的用户体验、减少部分操作步骤&#xff0c;组件库集成了卓越的拖拽功能&#xff0c;让用户可以更高效流畅的操作系统。 例如&#xff1a;表格支持多行拖拽排序、跨表数据调整、个性化调整列顺序&#xff1…

【物联网技术与应用】实验4:继电器实验

实验4 继电器实验 【实验介绍】 继电器是一种用于响应施加的输入信号而在两个或多个点或设备之间提供连接的设备。换句话说&#xff0c;继电器提供了控制器和设备之间的隔离&#xff0c;因为设备可以在AC和DC上工作。但是&#xff0c;他们从微控制器接收信号&#xff0c;因此…

fpga系列 HDL:Quartus II 时序约束 静态时序分析 (STA) test.out.sdc的文件结构

test.out.sdc的文件结构 ## Generated SDC file "test.out.sdc"## Copyright (C) 1991-2013 Altera Corporation ## Your use of Altera Corporations design tools, logic functions ## and other software and tools, and its AMPP partner logic ## functions,…

Windows安全中心(病毒和威胁防护)的注册

文章目录 Windows安全中心&#xff08;病毒和威胁防护&#xff09;的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心&#xff08;病毒和威胁防护&#xff09;的注册 本文我们来分析一下Windows安全中心&#xff08;Windows Security Center…

HTML中的Vue3解析!

#Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它在 HTML 中发挥着重要的作用&#xff0c;可以让开发者轻松地创建交互式的网页应用。与 HTML 结合时&#xff0c;Vue 3 通过自定义指令、组件等方式增强了 HTML 的功能。# 一、vue的概述 Vue 采用了双向数据绑定机制…

ARM嵌入式学习--第八天(PWM)

PWM -PWM介绍 PWM&#xff08;pulse Width Modulation&#xff09;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在测量&#xff0c;通信&#xff0c;工控等方面 PWM的频率 是指在1秒钟内&#xff0c;信号从…

TongESB7.1.0.0安装参考指引+测试参考(by lqw)

文章目录 安装安装准备配置jdk安装管理中心&#xff08;manager&#xff09;安装运行时(server)安装mysql并配置manager&#xff08;新装阶段考虑&#xff09;放入授权启动内置redis启动内置redis启动manager和server停止manager和server访问控制台如何在控制台上重置密码 测试…

【现代C++开发】使用现代的C++快速开发一款串口读写软件

文章目录 前言一、必要条件二、实现步骤1.创建项目2.配置代码提示3.安装依赖3.编译程序4. 编写实现代码 前言 最近关于C闹出来的动静态势挺大的&#xff0c;主要是由于爱美丽卡开始抵制C&#xff0c;最近有不少文章都报道了这件事&#xff0c;比如 即使C到了这个时候&#xf…

linux上qt打包(二)

sudo apt install git 新建一个文件夹 名为xiazai&#xff0c; chmod -R 777 xiazai cd xiazai 并进入这个文件夹&#xff0c;然后clone git clone https://github.com/probonopd/linuxdeployqt.git 此处可能要fanQiang才能下 cd linuxdeployqt文件夹 下载平台需要的…

电脑开机提示error loading operating system怎么修复?

前一天电脑还能正常运行&#xff0c;但今天启动时却显示“Error loading operating system”&#xff08;加载操作系统错误&#xff09;。我已经仔细检查了硬盘、接线、内存、CPU和电源&#xff0c;确认这些硬件都没有问题。硬盘在其他电脑上可以正常使用&#xff0c;说明不是硬…

Nginx 在不同操作系统下的安装指南

Nginx 在不同操作系统下的安装指南 一、Linux 系统下 Nginx 的安装 &#xff08;一&#xff09;基于 Ubuntu 系统 更新软件包列表 打开终端&#xff0c;首先执行sudo apt-get update命令。这一步是为了确保系统的软件包列表是最新的&#xff0c;能够获取到最新版本的 Nginx 及…

NTLMv2 离线爆破

攻击者&#xff08;kali&#xff09;&#xff1a;192.168.72.162 受害者&#xff08;administrator&#xff09;&#xff1a;192.168.72.163 因为 NTLM 身份验证是通过计算正确的挑战值得出的&#xff0c;所以如果我们能获取域用户的 NTLM 认证某一服务的 Net-NTLM v2 Hash …

“TA”说|表数据备份还原:SQLark 百灵连接助力项目部署验收

&#x1f4ac; 南飞雁&#xff5c;应用开发工程师 有些重要项目的部署验收&#xff0c;会在生产环境完成&#xff0c;验收完成后&#xff0c;又需要把这部分数据清空。这时就需要对数据表进行备份和还原&#xff0c;虽然可以通过命令直接实现&#xff0c;但是有一些操作门槛&am…

C++动态规划解决最长公共子序列

动规非常经典的一道题目&#xff0c;由于需要用到二维数组——姑且算为中等难度的题目&#xff0c;其实和01背包有着极高的相似度&#xff0c;无论是实现还是理论。 今天这篇博客不讲过多的DP理论&#xff0c;重在讲解题目本身。其实有一定经验的同志都清楚&#xff0c;DP的难点…

Meta升级Ray-Ban智能眼镜:新增实时AI对话与翻译功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

visual studio添加滚动条预览

如何在vs中添加如图的滚动条呢&#xff1f; 打开VS 工具栏 选项 - 文本编辑器 - C/C - 滚动条 行为-使用缩略图 -- 确定

VUE利用一句话复刻实现变声功能

实现思路&#xff1a;利用语音听写实现语音输入---拿到文字后自动调用一句话复刻实现声音输出。最终效果是A输入语音能够转换成B的语音输出。 <template><div class"One-container"><div><hr/><!--发音音色列表展示--><el-row :gut…

Firefly: 大模型训练工具,命令行执行训练,没有界面

文章目录 GitHub地址参数说明训练命令 Firefly: 大模型训练工具&#xff0c;支持训练Qwen2.5、Qwen2、Yi1.5、Phi-3、Llama3、Gemma、MiniCPM、Yi、Deepseek、Orion、Xverse、Mixtral-8x7B、Zephyr、Mistral、Baichuan2、Llma2、Llama、Qwen、Baichuan、ChatGLM2、InternLM、Zi…

自动驾驶AVM环视算法--python版本的俯视碗型投影模式

c语言版本和算法原理的可以查看本人的其他文档。《自动驾驶AVM环视算法--3D碗型投影模式的exe测试工具》本文档进用于展示部分代码的视线&#xff0c;获取方式网盘自行获取&#xff08;非免费介意勿下载&#xff09;&#xff1a;链接: https://pan.baidu.com/s/1STjUd87_5wDk_C…

汽车供应链 “剧变”开始,“智能感知潜在龙头”诞生

智能汽车产业链“剧变”已经开启&#xff0c;智能感知软硬件能力的权重正在不断被放大。 比如满足高阶泊车的第二代AK2超声波传感器、满足人机共驾场景需求的电子外后视镜&#xff08;CMS&#xff09;、iTOF 3D成像视觉感知&#xff08;用于舱内监控&#xff09;等新产品&…