日期:2026年4月22日
ZeroJudge 題目連結:d174. 10297 - Beavergnaw
解題想法
先看最右上角剩下部分的截面,相當於是一個底、高皆為 $\frac{D-d}{2}$ 的等腰直角三角形,因此上、下兩塊截面為梯形的部分,是兩個圓錐相減,兩者的底分別為 $\frac{D}{2}$ 及 $\frac{d}{2}$,圓錐相減後的體積為 $$ \frac{1}{3} \pi \cdot \left( \frac{D}{2} \right)^2 \cdot \frac{D}{2} - \frac{1}{3} \pi \cdot \left( \frac{d}{2} \right)^2 \cdot \frac{d}{2} = \frac{\pi}{24} (D^3 - d^3) $$ 中間直徑為 $d$ 的圓柱體積為 $$ \pi \cdot \left( \frac{d}{2} \right)^2 \cdot d = \frac{\pi}{4} d^3 $$ 直徑為 $D$ 的圓柱體積為 $$ \pi \cdot \left( \frac{D}{2} \right)^2 \cdot D = \frac{\pi}{4} D^3 $$ 切掉的體積為 $$ V = \frac{\pi}{4} D^3 - \frac{\pi}{4} d^3 - 2 \times \frac{\pi}{24} (D^3 - d^3) = \frac{\pi}{6} (D^3 - d^3) ~\Rightarrow~ d = \left( D^3 - \frac{6V}{\pi} \right)^{\frac{1}{3}} $$
Python 程式碼
使用時間約為 52 ms,記憶體約為 22 MB,通過測試。
def solve():
import sys, math
result = []
data = sys.stdin.read().split()
ptr = 0
while ptr < len(data):
D = int(data[ptr])
V = int(data[ptr+1])
ptr += 2
if D == 0 and V == 0: break
d = (D**3 - 6*V/math.pi)**(1/3)
result.append(f"{d:.3f}\n")
sys.stdout.write("".join(result))
if __name__ == "__main__":
solve()