100242. 乐乐的计算 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB
题目描述
乐乐的学校为了宣传创文,特地组织了一次长跑活动。长跑总共要经过n个地点分别标记为p1…pn,长跑的路线绘制在一张图纸上,图纸上除了标识n个地点的位置和路线外,还标识了每个地点的海拔高度hi(0<hi<=100),以及相邻地点的距离si(0<si<=100),假设每段路程都是近似于直线的线段。好奇的乐乐想知道在这长跑路线图里面,海拔最高点与最低点的直线距离是多少?
输入
第一行:一个整数n(2≤n≤100)。
第二行:n个空格分开的整数hi,第i个整数代表第i个地点的高度。
第三行:n-1个空格分开的整数si,第i个整数代表第i段距离。
输出
一个实数海拔最低点与海拔最高点的距离(结果保留两位小数)。
样例输入
8
2 4 1 5 3 11 4 6
3 4 5 3 10 6 3
样例输出
15.04
数据范围限制
无
提示
解题思路以及作者的分析
这一道题目的难度是普及组的第1或第2道题的难度。
嗯嗯还算是水体一发。
话不多说来讲一下解题思路。
我们假设每一条线都是很值的情况下。
我们把最高点与最低点的直线叫做P。
要求这条直线的长度。直接求不是很好求。所以呢,我们需要用别的求法。相信大家都知道勾股定理吧。a²+b²=c²。我们可以利用这条关系来解决这道奇妙的问题。首先,我们知道了很多上坡路和下坡路和平路的距离这个距离我们把它看作三角形的斜边。我们来构造这样一个三角形。注意:这个三角形是一个直角三角形。再沿着斜边靠上一点的那一个点往下做一条高直到这条高的下面的那个点的高度等于较矮点的高度时停止。在下哦那个较矮点到高的较矮点链接一条线段。这样就组成了一个直角三角形。因为我们知道斜和一条直角边的长度,我们叫可以用勾股定理来求另一条直角边的长度(即底边)。在从最小高度到最大高度的两点之间,所有三角形底边的和就是一条直角边,两点的高度只差就是另一条直角边。在用一次勾股定理求出斜边即可。
思路就说那么多了吧!
以下是标程:
var
h,s:array[1..100] of real;
i,n,x,y,j:longint;
t,ans,sh,g:real;
juli:real;
begin
readln(n);
t:=-10000;
sh:=10000;
for i:=1 to n do
begin
read(h[i]);
if h[i]>t then
begin
t:=h[i];
x:=i;
end;
if h[i]<sh then
begin
sh:=h[i];
y:=i;
end;
end;