题解 AT_pakencamp_2020_day1_d 立方体を壊せ!

· · 题解

思路

对于这种数学题,我们的第一反应是打开画图软件。

发现随着 K 的增大,面会逐渐上升,直至离开正方体。

K\ge 3N 时,面离开正方体,此时体积 V=N^3

K\le N 时,所切得面为三棱锥。

此时三棱锥的底面等腰直角三角形的直角边长度等于 K,高也为 K,由椎体体积公式 V=\dfrac13Sh,可得体积为 V=\dfrac13\times(\dfrac12K^2)\times K=\dfrac16K^3

2N\le K\le 3N,面所切的上部分为同 K\le N 时情景相同的三棱柱,直角边长度为 3N-K

可得体积为 V=N^3-\dfrac16(3N-K)^3

N\le K\le 2N,时,尝试补全图形。

易得 V=\dfrac16K^3-\dfrac12(K-N)^3

记得要把体积的结果乘以 6 后输出。

AC 代码

n,k = map(int,input().split(" "))
if k>=n*3:
    print(6*n*n*n)
elif k<=n:
    print(k*k*k)
elif k>=n*2:
    x = 3*n-k
    print(6*n*n*n-x*x*x)
else:
    print(k*k*k-3*pow((k-n),3))