先是空间换时间,但是后百分之三十数据使用空间过大,运行错误。
舍弃大量空间,判断点是否在tree(树)数组中,来判断是否相等,(x,y)in tree,太慢了,空间小了,但是时间超时。
最后将tree数组变为tree字典,解决时间超时。
python 70分 (生成地图数组太大另外百分之三十不通过)
n, L, S = list(map(int, input().split(" ")))
tree = [list(map(int, input().split(" "))) for i in range(n)]
arr = [list(map(int, input().split(" "))) for j in range(S + 1)]
#交换数组
arr=arr[::-1]
#建立地图01矩阵
area = [[0] * (L + 1) for i in range(L + 1)]
for i in tree:
area[i[0]][i[1]] = 1
#比较AB
sums = 0
S2 = (S + 1) * (S + 1)
for k in tree:
flag = 1
nums = 0
for i in range(S + 1):
if i + k[0] > L:
break
for j in range(S + 1):
if j + k[1] > L:
break
if arr[i][j] == area[i + k[0]][j + k[1]]:
nums += 1
else:
flag = 0
break
if not flag:
break
if nums == S2:
sums += 1
print(sums)
python 70分 (tree数组定位,时间超时)
n, L, S = list(map(int, input().split(" ")))
tree = [list(map(int, input().split(" "))) for i in range(n)]
arr = [list(map(int, input().split(" "))) for j in range(S + 1)]
# 交换数组
arr=arr[::-1]
# 建立地图01矩阵
# area = [[0] * (L + 1) for i in range(L + 1)]
# for i in tree:
# area[i[0]][i[1]] = 1
# 比较AB
sums = 0
S2 = (S + 1) * (S + 1)
for k in tree:
flag = 1
nums = 0
for i in range(S + 1):
for j in range(S + 1):
s=[i+k[0],j+k[1]] in tree
if arr[i][j] ==1 and s:
nums += 1
elif arr[i][j] ==0 and (not s) and i+k[0]<=L and j+k[1]<=L:
nums += 1
else:
flag = 0
break
if not flag:
break
if nums == S2:
sums += 1
print(sums)
python 100分 (字典定位)
n, L, S = list(map(int, input().split(" ")))
tree = [list(map(int, input().split(" "))) for i in range(n)]
arr = [list(map(int, input().split(" "))) for j in range(S + 1)]
xy={}
for i in tree:
xy[(i[0],i[1])]=1
# 交换数组
arr=arr[::-1]
# 建立地图01矩阵
# area = [[0] * (L + 1) for i in range(L + 1)]
# for i in tree:
# area[i[0]][i[1]] = 1
# 比较AB
sums = 0
S2 = (S + 1) * (S + 1)
for k in tree:
flag = 1
nums = 0
for i in range(S + 1):
for j in range(S + 1):
s=(i+k[0],j+k[1]) in xy
if arr[i][j] ==1 and s:
nums += 1
elif arr[i][j] ==0 and (not s) and i+k[0]<=L and j+k[1]<=L:
nums += 1
else:
flag = 0
break
if not flag:
break
if nums == S2:
sums += 1
print(sums)