https://atcoder.jp/contests/abc144/tasks/abc144_d
解説
https://atcoder.jp/contests/abc144/submissions/8169237
数学的な問題のようだ。
0°の状態から傾けていくと、水の形は最初長方形だが、台形の柱となり、三角柱となりと遷移する。
三角柱になる前に溢れる可能性もあるが、この境目は体積の半分になる。
溢れる寸前の角度をθとする。
水が体積の半分より少ない場合は、三角柱となってから、ある角度でこぼれる。
溢れる寸前の時の底面の長方形がy×aになっているとすると、aby/2=xとなるので、y=2x/abである。
すると、tanθ=b/yなので、tanθ=ab2/(2x)である。よって、θ=atan(ab2/(2x))が答え。
水が体積の半分より多い場合は、台形の柱の状態で、ある角度でこぼれる。
作られる台形の切り取られている部分の長さbの辺の残りの部分をyとすると、
y=2b-2x/a2となる。tanθ=y/aとなるので、θ=atan((2b-2x/a2)/a)が答え。
atanは弧度法になってるので、/π*180で度数法に変換して答える。
double A, B, X; //--------------------------------------------------------------------------------------------------- void _main() { cin >> A >> B >> X; double half = A * A * B / 2; double ans; if (X < half) ans = atan(A * B * B / (2.0 * X)); else ans = atan((2.0 * B - 2.0 * X / (A * A)) / A); ans = ans / PI * 180; printf("%.10f\n", ans); }