灯泡(信息学奥赛一本通 1438)
时间:2019-08-22
本文章向大家介绍灯泡(信息学奥赛一本通 1438),主要包括灯泡(信息学奥赛一本通 1438)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
输入格式
输入文件的第一行包含一个整数 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
数据范围与提示
T≤100,1e−2≤H,h,D≤1e3, 1e-2<=H-h
本题的关键算法呢,是肥肠简单的三分(注意哦,我们这里可不是三分答案,而是三分人到墙的距离,设为x)
当人的影子头部恰好在墙角时,由相似三角形可得h/H=x/D
那么当x<=h*D/H时,墙上的影子(即下图中的粉色线段)长度为H-(H-h)*D/(D-x),那影子总长就是x+(H-(H-h)*D/(D-x))
(不太明白可以看看下面的图,图中两个黄色三角形相似)
而当x>h*D/H时,地上的影子(同样是下图中的粉色线条,两个黄色的三角形也同样相似)长度为x+((D-x)* H/(H-h))-D;
(为了避免颜色重合,有些线条上下分离了,但其实是在一条直线上的)
那么具体看代码吧
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+5; 4 int n; 5 int m,q,ans,p,tot; 6 double H,D,h; 7 int read() 8 { 9 int f=1;char ch; 10 while((ch=getchar())<'0'||ch>'9') 11 if(ch=='-')f=-1; 12 int res=ch-'0'; 13 while((ch=getchar())>='0'&&ch<='9') 14 res=res*10+ch-'0'; 15 return res*f; 16 } 17 void write(int x) 18 { 19 if(x<0) 20 { 21 putchar('-'); 22 x=-x; 23 } 24 if(x>9)write(x/10); 25 putchar(x%10+'0'); 26 } 27 double f(double x) 28 { 29 if(x<=h*D/H) return x+(H-(H-h)*D/(D-x));//此时墙上也有影子 30 else return x-D+((D-x)* H/(H-h));//此时墙上莫得影子 31 } 32 int main() 33 { 34 int t;t=read(); 35 while(t--) 36 { 37 scanf("%lf%lf%lf",&H,&h,&D); 38 double l=0,r=D; 39 while(r-l>1e-11) 40 { 41 double lmid=l+(r-l)/3,rmid=r-(r-l)/3; 42 if(f(lmid)<f(rmid))l=lmid; 43 else r=rmid; 44 } 45 printf("%.3lf\n",f(l)); 46 } 47 return 0; 48 }
声明:上面的图全都是我辛辛苦苦用windows自带的画图工具肝出来的,你说要不要鼓励下我,给个“推荐”呢(✪ω✪)
原文地址:https://www.cnblogs.com/ljy-endl/p/11393814.html
- Java基础-day02-代码题
- 优化算法——拟牛顿法之L-BFGS算法
- 一次性能突发情况的紧急修复(r9笔记第18天)
- Java基础-day02-基础题
- 简单易学的机器学习算法——AdaBoost
- 用脚本来讲一个技术生活的故事 (r9笔记第32天)
- 优化算法——拟牛顿法之BFGS算法
- 对于tnsping的连接超时的功能补充(二)(r9笔记第22天)
- 用深度学习每次得到的结果都不一样,怎么办?
- 优化算法——拟牛顿法之DFP算法
- python SVM 案例,sklearn.svm.SVC 参数说明
- 利用Theano理解深度学习——Auto Encoder
- sudo 出现unable to resolve host 解决方法
- Hadoop学习笔记——Hadoop常用命令
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 女神节 | 程序员如何低调而又不失逼格
- Flutter 拖拽控件Draggable看这一篇就够了
- 面试官:你精通多少种语言的Hello World?
- Flutter 裁剪类组件 最全总结
- Flutter Form表单控件超全总结
- 你知道吗,Flutter内置了10多种Button控件
- Flutter 日期时间DatePicker控件及国际化
- 强大的Flutter App升级功能
- 你知道吗,Flutter内置了10多种show
- 还记得第一个看到的Flutter组件吗?
- 150多个Flutter组件详细介绍送给你
- Flutter 学习路线图
- Flutter 强大的MediaQuery控件
- 基于web的图书管理系统设计与实现
- 《Flutter 动画系列一》25种动画组件超全总结