Python:在python在线编译器中解决内存约束p r o b l e m



>问题

我正在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

最新更新