ABC144 D. Water Bottle
問題
底辺が1辺a cmの正方形で、高さがb cmである直方体に、体積x cm^3の水を入れる。
これを底辺のどれか1辺を軸に傾ける。
水が溢れないように傾けられる最大の角度を求めよ。
制約
- 1 <= a <= 100
- 1 <= b <= 100
- 1 <= x <= a * a * b
解法
θだけ傾けた場合を考える。
このとき、傾けたa cm側とb cm側がどちらも無限に長いと仮定すると、
水面となす三角形のa cm側の長さs cm、b cm側の長さt cmとおけば、
体積は、「s * t * a / 2 = x」、角度から「t/s = tan θ」がわかる。
これからs, tがわかる。
この時点でt >= bであれば、こぼれていることになる。
また、t < bでも、s >= aである場合は、水面反対側の側面に接して台形のような感じになっている。
この場合も、同様に変数をおいて、長さと角度からb cm側の水面の位置が求められる。
これでb cmよりも長ければ、こぼれていることになる。
そうでなければこぼれていない。
あとは、θを二分探索でもとめればよい。