比如说:除以零等等等等
你这个可能是循环太多了吧,建议你把源码贴上来,截图看着不是很清楚。
希望我的回答对你有帮助~
从结论到过程:
结论: 我做不到, 无法通过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内.
以上, 祝享受编程.
课程:
(1)基本算法: 二分,分治,贪心
(2) 离散数学离散数学动态规划
(3) 搜索算法:深度优先 搜索,广度优先搜 A*算法 ,阿尔法贝塔剪枝
(4)数据结构: 线段树, 树状数组,并查集,Trie图
(5)图论问题:最小生成树 最短路 强连通分量、桥和割点
(6)网络流算法:基本的网络流算法,Dinic算法,带上下界的网络流,最小费用流
(7)计算几何:线与线求交,线与面求交,求凸包,半平面求交等
(8) 离散数学,高等数学,线性代数,初等数论,计算几何
(9)计算机专业英语
(10)C++;基础的递归、枚举算法
扩展资料:1.参赛队伍最多由三名参赛队员组成。
2.竞赛中命题10题左右,试题描述为英文,比赛时间为5个小时,前四个小时可以实时看到排名,最后一小时封榜,无法看到排名。
3.竞赛可以使用的语言:Java, C, C++, Kotlin 和 Python。
4.重点考察选手的算法和程序设计能力,不考察实际工程中常用的系统编程,多线程编程等等;
5.选手可携带任何非电子类资料,包括书籍和打印出来的程序等,部分赛区会对选手携带的纸质资料做限制。
6.评委负责将结果(正确或出错的类型)通过网络尽快返回给选手,除此之外不提供任何额外帮助;
7.每个题目对应一种颜色的气球,通过该题目的队伍会得到对应颜色气球。每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。
参考资料:北京大学暑期课:ACM/ICPC竞赛训练
百度百科-ACM国际大学生程序设计竞赛