目录
题目
代码
n,L,s=map(int,input().split())
a=[]
d={}
for i in range(n):
t=list(map(int,input().split()))
a.append(t)
d[(t[0],t[1])]=1
#print(d)
b=[]#藏宝图
for i in range(s+1):
t=list(map(int,input().split()))
b.append(t)
b.reverse()
sum=0
def check(d,b,s,sum,i,j):
flag=0
for ii in range(s+1):
for jj in range(s+1):
if i+s>L or j+s>L:
flag=1
break
if b[ii][jj]==1 and (i+ii,j+jj) not in d:
flag=1
break
if b[ii][jj]==0 and (i+ii,j+jj) in d:
flag=1
break
if flag==1:
break
if flag==0:
sum+=1
return sum
for aa in a:
sum=check(d,b,s,sum,aa[0],aa[1])
print(sum)
注意
1、要把数的坐标放在字典里,因为字典的in函数,要比列表的in,函数快很多
因为python中list对象的存储结构采用的是线性表,因此其查询复杂度为O(n),而dict对象的存储结构采用的是散列表,其在最优情况下查询复杂度为O(1)。
2、reverse()函数实现列表的翻转