熱門文章

2026年4月22日 星期三

ZeroJudge 解題筆記:d174. 10297 - Beavergnaw

作者:王一哲
日期: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()


C++ 程式碼


使用時間約為 14 ms,記憶體約為 2 MB,通過測試。
#include <cstdio>
#include <cmath>

int main() {
    int D, V;
    double pi = acos(-1.0);
    while(scanf("%d %d", &D, &V) != EOF) {
        if (D == 0 && V == 0) break;
        double d = cbrt(1.0*D*D*D - 6.0*V/pi);
        printf("%.3lf\n", d);
    }
    return 0;
}


沒有留言:

張貼留言