1. 程式人生 > >HDU 5954 - Do not pour out - [積分+二分][2016ACM/ICPC亞洲區沈陽站 Problem G]

HDU 5954 - Do not pour out - [積分+二分][2016ACM/ICPC亞洲區沈陽站 Problem G]

enter The test level not its acm ott pla

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5954

Problem Description
You have got a cylindrical cup. Its bottom diameter is 2 units and its height is 2 units as well.
The height of liquid level in the cup is d (0 ≤ d ≤ 2). When you incline the cup to the maximal angle such that the liquid inside has not been poured out, what is the area of the surface of the liquid?

Input
The first line is the number of test cases. For each test case, a line contains a float-point number d.

Output
For each test case, output a line containing the area of the surface rounded to 5 decimal places.

Sample Input
4
0
1
2
0.424413182

Sample Output
0.00000
4.44288
3.14159
3.51241

題意:

有一個圓柱形杯子,底部直徑為 $2$,高為 $2$,告訴你當杯子水平放置時水面高度為 $d(0 \le d \le 2)$,

求當在水不倒出來的前提下杯子傾斜角度最大時,水面面積。

題解:

(參考https://blog.csdn.net/danliwoo/article/details/53002695)

當 $d=1$ 時,是臨界情況。

當 $d>1$ 時,水面為一個橢圓,設 $\theta$ 為水面與杯底的夾角,則 $S = \pi R r = \pi \cdot \frac{1}{cos \theta} \cdot 1 = \frac{\pi}{cos \theta}$。

當 $d<1$ 時,水面為一個橢圓截取一部分:

技術分享圖片若將水此時的形狀,按平行於杯底的方向,分割成若幹薄面,每個薄面的面積為 $S_0$,則水的體積為

$V = \int_{0}^{2}S_0dy$;

不難求得

$y_0 = x_0 tan \theta$

$1 + \cos \alpha = x_0$

$S_0 = \pi - \alpha + \sin \alpha \cos \alpha$

上三式,對於 $0 \le \alpha \le \pi$(即 $2 \ge x_0 \ge 0$)均成立。

則水的體積定積分可變為

$V = \int_{0}^{2}(\pi - \alpha + \sin \alpha \cos \alpha)d[(1 + \cos \alpha)\tan\theta]$

$\tan\theta \int_{\pi}^{\alpha_1}(\pi - \alpha + \sin \alpha \cos \alpha)(- \sin \alpha)d\alpha$

其中 $\alpha_1 = \arccos(1-\frac{2}{\tan\theta})$。

對上式積分得

$V = \tan \theta [(\pi \cos \alpha) + (\sin \alpha - \alpha \cos \alpha) - \frac{1}{3} \sin^3 \alpha]_{\pi}^{\alpha_1}$

那麽,我們可以二分 $\theta$,使得 $V$ 逼近 $\pi d$,從而確定 $\theta$,進而求得水面面積。

HDU 5954 - Do not pour out - [積分+二分][2016ACM/ICPC亞洲區沈陽站 Problem G]