CF1199B Water Lily 题解

Content

有一朵长在水中的莲花,其茎秆部分露出水面的高度为 \(h\)。有人将它往右边拽了 \(l\) 米,使得整个茎秆部分都浸在水中。求池水的深度。

数据范围:\(1\leqslant h<l\leqslant 10^6\)。

Solution

勾股定理好题,具体根据下面的图来讲讲(其实就是蒯的 CF 的)。

CF1199B Water Lily 题解

我们设水的深度为 \(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;
}
上一篇:LeetCode200 岛屿数量


下一篇:Water 2.4 发布,一站式服务治理平台