Content
有一朵长在水中的莲花,其茎秆部分露出水面的高度为 \(h\)。有人将它往右边拽了 \(l\) 米,使得整个茎秆部分都浸在水中。求池水的深度。
数据范围:\(1\leqslant h<l\leqslant 10^6\)。
Solution
勾股定理好题,具体根据下面的图来讲讲(其实就是蒯的 CF 的)。
我们设水的深度为 \(x\),那么整个茎秆部分的高度为 \(x+h\),又由于我们将它拽了 \(l\) 米之后的茎秆部分的高度不变,所以原来浸在水中的一段,拽的一段以及最后全部浸在水中的一段就构成了一个直角三角形。因此我们可以列出下面的方程:
\[x^2+l^2=(x+h)^2 \]下面给大家解一下吧:
\[x^2+l^2=x^2+2hx+h^2 \] \[2hx+h^2=l^2 \] \[2hx=l^2-h^2 \] \[\therefore x=\dfrac{l^2-h^2}{2h} \]直接输出这个结果就好。注意,由于相乘的时候结果可能很大,\(h,l\) 在开变量的时候建议开 \(\texttt{long long}\)。
Code
ll h, l;
int main() {
getll(h), getll(l);
double ans = (l * l - h * h) / (h * 2.0);
printf("%.9lf", ans);
return 0;
}