>问题
我正在Hackerearth上解决这个问题,当提交我的代码输入3
时占用了 1045 MB 内存并失败(内存约束 25MB),对于其他输入代码刚刚工作。我试图理解这种行为,但没有得到它(几乎所有输入都类似,它卡在输入 3 上)。代码中有什么问题或我错过了什么?
问题
钱丹给了儿子一个N面的立方体。N X N X N 立方体由小的 1 X 1 X 1 立方体组成。
钱丹的儿子和他一样臭名昭著。所以他把立方体扔进了一个装满可乐的罐子里。立方体完全沉浸在那个水箱里。他的儿子不知何故能够从坦克中取出立方体。但很快,他的儿子意识到,因为可乐,立方体已经变脏了。由于Chandan不喜欢脏东西,所以他的儿子决定把在这个过程中弄脏的所有小立方体都扔掉。一个立方体的六个面中的任何一个都有可乐,被认为是脏的,被报废了。在完成这个繁琐的部分后,他的儿子决定计算报废材料的体积。由于Chandan的儿子数学很弱,他无法独自完成。
帮助他计算所需的体积。
My_Solution
side_of_cube = list()
test_case = int(raw_input())
for i in range(test_case):
side_of_cube.append(int(raw_input()))
if side_of_cube[i] < 2:
print 1
else:
volume = (((side_of_cube[i])**3) - ((side_of_cube[i]) - 2)**3)
print volume
Input_provided
输入 1
输入 2
输入 3
输入 4
输入 5
我看不到输入页面,但假设它们可能包含大数字并且N^3
太长。
但是您可以将公式简化为二次结果(或使用面积、边、角直接获得曲面立方体的数量)
我希望这条线索足以获得更好的解决方案。
了解你的数学。您正在寻找两个立方体的差异,因此您有一个简单的因式分解:
a³-b³ = (a-b)*(a² + b² + ab)
在您的问题中,a
是立方体的边,b
是立方体减去 2 的边,因此它被简化为:
a³-b³ = (a-(a-2))*(a² + (a-2)² + a*(a-2))
a³-b³ = 6*a² - 8*a + 8
您的代码将变为:
side_of_cube = list()
test_case = int(raw_input())
for i in range(test_case):
side_of_cube.append(int(raw_input()))
a = side_of_cube[i]
if a < 2:
print 1
else:
volume = 6*(a**2) - 8*a + 8
print volume