题解:P17050 [NWERC 2022] 翻瓶挑战 / Bottle Flip

· · 题解

在我完全只会高一知识的情况下能通过此题吗。

主要思路

把瓶子的总质量看成两部分:

水:高度为 x,密度 d_w,质量 m_w = d_w \cdot \pi r^2 x,它的重心在 x/2 处。

空气:高度为 h-x,密度 d_a,质量 m_a = d_a \cdot \pi r^2 (h-x),它的重心在 (x+h)/2 处。

整个瓶子的重心高度 X 可以用类似杠杆平衡的思路求出:

X = \frac{m_w \cdot \frac{x}{2} + m_a \cdot \frac{x+h}{2}}{m_w + m_a}

把质量表达式代入,消去 \pi r^2,得到:

X(x) = \frac{d_w x \cdot \frac{x}{2} + d_a (h-x) \cdot \frac{x+h}{2}}{d_w x + d_a (h-x)}

化简分子:

d_w x \cdot \frac{x}{2} = \frac{d_w x^2}{2} d_a (h-x) \cdot \frac{x+h}{2} = \frac{d_a (h^2 - x^2)}{2}

所以分子为 \frac{1}{2}\left[(d_w - d_a)x^2 + d_a h^2\right]

分母为 d_w x + d_a (h-x) = d_a h + (d_w - d_a)x

因此:

X(x) = \frac{(d_w - d_a)x^2 + d_a h^2}{2\left[d_a h + (d_w - d_a)x\right]}

为了看起来美观,先设:

A = d_w - d_a B = d_a h^2 C = d_a h

那么式子就变成了:

X(x) = \frac{Ax^2 + B}{2(Ax + C)}

这是一个分式函数,我们要求它在 x \in [0, h] 上的最小值。

设:

t = Ax + C

由于 x \in [0, h],所以 t \in [C, \, A h + C]

同时,由 x = \frac{t - C}{A},代入分子 Ax^2 + B

Ax^2 + B = A \cdot \frac{(t-C)^2}{A^2} + B = \frac{(t-C)^2}{A} + B

于是整个式子变成:

X = \frac{1}{2} \cdot \frac{\frac{(t-C)^2}{A} + B}{t} = \frac{1}{2} \left( \frac{t^2 - 2Ct + C^2}{A t} + \frac{B}{t} \right)

进一步拆开:

X = \frac{1}{2} \left( \frac{t}{A} - \frac{2C}{A} + \frac{C^2}{A t} + \frac{B}{t} \right) = \frac{1}{2} \left( \frac{t}{A} - \frac{2C}{A} + \frac{C^2 + AB}{A t} \right)

注意到 C^2 + AB 是一个常数,我们可以算一下:

C^2 + AB = (d_a h)^2 + (d_w - d_a) \cdot d_a h^2 = d_a^2 h^2 + d_a(d_w - d_a)h^2 = d_a d_w h^2

所以:

X(t) = \frac{1}{2} \left( \frac{t}{A} - \frac{2C}{A} + \frac{d_a d_w h^2}{A t} \right)

然后用基本不等式。

现在 X(t) 中,只有 \frac{t}{A}\frac{d_a d_w h^2}{A t} 这两项会随 t 变化。而 - \frac{2C}{A} 是常数。

由均值不等式 \frac{a+b}{2} \ge \sqrt{ab} 可得:

\frac{t}{A} + \frac{d_a d_w h^2}{A t} \ge 2 \sqrt{ \frac{t}{A} \cdot \frac{d_a d_w h^2}{A t} } = 2 \sqrt{ \frac{d_a d_w h^2}{A^2} } = 2h \cdot \frac{\sqrt{d_a d_w}}{A}

当且仅当:

\frac{t}{A} = \frac{d_a d_w h^2}{A t}

即:

t^2 = d_a d_w h^2 \quad \Rightarrow \quad t = h \sqrt{d_a d_w}

时取得等号。

因为 t = A x + C = (d_w - d_a)x + d_a h,所以:

(d_w - d_a)x + d_a h = h \sqrt{d_a d_w}

解得:

x = h \cdot \frac{\sqrt{d_a d_w} - d_a}{d_w - d_a}

将分母有理化,分子分母同时乘以 \sqrt{d_a} + \sqrt{d_w},可得:

x = h \cdot \frac{\sqrt{d_a}}{\sqrt{d_a} + \sqrt{d_w}}

然后这就是最终的答案。

:::info[AC code]

#include <bits/stdc++.h>
#define int long long
#define fst ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 4e6 + 7;
const int P = 1e9 + 7;
const int MOD = 998244353;
const int INF = 0X3F3F3F3F;
// const int dx[] = {-1, 1, 0, 0, -1, -1, +1, +1};
// const int dy[] = {0, 0, -1, 1, -1, +1, -1, +1};
const int dx[] = {-1 , 1 , 0 , 0} ;
const int dy[] = {0 , 0 , -1 , 1} ;
double h , r , da , dw ;
double ans ;
signed main()
{
    fst ;
    cin >> h >> r >> da >> dw ;
    ans = h * sqrt(da) / (sqrt(da) + sqrt(dw)) ;
    cout << fixed << setprecision(10) << ans ;
    return 0 ;
}

:::