用python解ACM提示Runtime error 哪里有问题?请教

Python013

用python解ACM提示Runtime error 哪里有问题?请教,第1张

Runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。

比如说:除以零等等等等

你这个可能是循环太多了吧,建议你把源码贴上来,截图看着不是很清楚。

希望我的回答对你有帮助~

ACM比赛可以带纸质资料,准备一份模板是很有必要的,所以算法模版很重要,记住模版一定要权威,不要网上杂七杂八的拿来当模版,一份好的模板一定会对你的编程习惯和算法实现打下良好的基础。但是,ACM比赛的等级越高,模版的作用就越小,毕竟比赛不是套模板。

没有人会把每个算法敲几百遍,大牛更加不会,敲十遍还记不住的话,一百遍也没用的,重要的是对算法本身的理解。如果你真正理解了算法但写不出来,那是你编程水平问题,这样应该多看看大牛的代码,多看看模板。

大牛不是算法模板敲的多,而是对算法理解的深刻并加上做的题目多,算法就像数学公式,你记住公式难道就能考高分了吗。重要的是运用啊,一个数学高手对于新学的公式他可以随时推导出来,因为对公式真正理解啊,推的多了自然记住了,不是吗。对于新手,先不要学算法,先去poj做水题,就是简单的题目没什么算法,水题不要做太多,100题就差不多了。接下来就该系统的学习一下算法了,《算法导论》和《算法艺术与信息学竞赛》是我觉得必看的两本书。另外,历届NOI国家队选手的论文也是很有价值的,也属于必看。接下来继续去poj做题,多思考,做不出来就百度,google,poj做题的人非常多。做题可以查漏补缺,之前没碰到过的 算法都可能在题目中体现,碰到没学过的算法就百度学习,然后选一个好的放到你的算法模板库,poj做题1000以上想不成大牛都难!

我只想说大牛基本上都是这么过来的,当然不排除个别天才,不过我没碰到过也没听过谁不做大量的题就能成为牛人的,毕竟天道酬勤。

从结论到过程:

结论: 我做不到, 无法通过test39, 超时

过程:

进行了各种的python优化,

包括提前退出循环, 缓存内循环变量, 使用快速变量, 减少内循环函数调用, 等等

附件nums是我做的测试文件.

以此文件为基准, 以我电脑为平台

你的代码用了19.459s, 我的代码用了2.682s

以下为我的代码:

def main():

    na, ma = [int(s) for s in raw_input().split()]

    a = []

    for i in range(na):

        aRow = raw_input().strip()

        a.append(map(int, aRow))

    nb, mb = [int(t) for t in raw_input().split()]

    b = []

    for j in range(nb):

        bRow = raw_input().strip()

        b.append(map(int, bRow))

    ans, mx, my = -1, -1, -1

    diffRow, diffCol = max(na, nb) - 1, max(ma, mb) - 1

    rows = range(-diffRow, diffRow)

    cols = range(-diffCol, diffCol)

    nal = range(na)

    mal = range(ma)

    for x in rows:

        for y in cols:

            tmp = 0

            for i in nal:

                if not (0<=x+i<nb): continue

                rowA = a[i]

                rowB = b[i + x]

                for j in mal:

                    if not (0<=y+j<mb): continue

                    tmp += rowA[j] & rowB[j+y]

            if tmp > ans:

                ans, mx, my = tmp, x, y

    print mx, my

main()

python的代码慢一般都慢在循环上. 因为动态类型的关系, 所有的循环都要额外检查类型.

以及它本身作为解释型语言, 速度比C差了太多.

一般现在国外的竞赛网站都是给不同的语言定不同的时间. C和C++的时间一般是2s内, java3-5s内, python一般是15-16s内.

以上, 祝享受编程.