[AtCoder] ABC 144 D – Water Bottle

問題

方針

水筒を傾けた時に入る水の最大値を考えます。傾けた時の角度を \( \theta \) とします。このときの水筒の容量を \( V (\theta)\) とします。そして、\( V (\theta) = x \) を満たす \( \theta \) を求めます。

\( 0 \leq \theta \leq \dfrac{\pi}{4} \) のとき

水筒1

このとき、上部の線まで水を入れることができます。上部の三角形の面積を \( s \) とすると、

\[s =  \dfrac{a^2 \tan{\theta}}{2}\]

となります。このとき、上部の体積は、\( as \) となるので、容量は、

\[ V( \theta) = a^2b – \dfrac{a^3 \tan{\theta}}{2}\]

となります。よって次のように方程式を解きます。

\[\begin{eqnarray}
a^2b – \dfrac{a^3 \tan{\theta}}{2} &=&  x\\
\tan{\theta} &=& \dfrac{2(a^2b – x)}{a^3} \\
\theta &=& \tan^{-1} {\dfrac{2(a^2b – x)}{a^3}}
\end{eqnarray}\]

\( \dfrac{\pi}{4} \leq \theta \leq \dfrac{\pi}{2} \) のとき

水筒2

このとき、水筒の容量は下部の三角形の領域で表される体積となるので、下部の三角形の面積を \( s \) とすると、

\[s = \dfrac{b^2}{2\tan{\theta}}\]

となるので、容量は、

\[ V( \theta) = \dfrac{ab^2}{2\tan{\theta}}\]

となり、\( \theta \) は、

\[\begin{eqnarray}
\dfrac{ab^2}{2\tan{\theta}} &=&  x\\
\tan{\theta} &=& \dfrac{ab^2}{2x} \\
\theta &=& \tan^{-1} { \dfrac{ab^2}{2x}}
\end{eqnarray}\]

とります。

また答えは、弧度法なので、

\[\dfrac{180\theta}{\pi}\]

とります。

コード