输入
:i)长度为N的字符串,由1s和0s组成
ii)长度为M的字符串,由1和0组成
iii)用空格分隔的整数对i,j的列表
输出:
对于输入的每个i,j,A [i,j]。
A [i,j] = A [i-1,j] NAND A [i,j-1]。
第一行作为第一个字符串,第一列作为第二个字符串(右上角的元素为空)。
我已经通过遍历矩阵中每个元素的蛮力方法解决了问题,并且我正在尝试思考优化代码的方法。我想使其运行足够快,以便N = 10 ^ 5和M = 10 ^ 5可以在2-3秒内运行。
r=[]
N=list(map(int,list(input())))
M=list(map(int,list(input())))
n=len(N)
m=len(M)
Y=[1 for j in range(m+1)]
A=[Y.copy() for i in range(n+1)]
A[0]=[-1]+M
for i in zip(A[1:],N):
i[0][0]=i[1]
for k in range(1,min(n,m)+1):
for i in range(k,n+1):
if (A[i-1][k] and A[i][k-1]):
A[i][k]=0
for j in range(k+1,m+1):
if (A[k-1][j] and A[k][j-1]):
A[k][j]=0
q=int(input())
for i in range(q):
qj,qi=map(int,input().split())
r.append(str(A[qi][qj]))
答案 0 :(得分:2)
我建议查看一些示例序列产生的模式,例如:
X XXXX X X XX X X XXXXXXXX
XXXX X X XXXX X X XX X X X X X X
X XX X X X XX X X XX X X X X X
X X XX X X X XX X X XX X X X X X
XX X XX X X X XX X X XX X X X X
X X X XX X X X XX X X XX X X X X
XX X X XX X X X XX X X XX X X X
XX X X XX X X X XX X X XX X X X
X XX X X XX X X X XX X X XX X X
X XX X X XX X X X XX X X XX X X
X X XX X X XX X X X XX X X XX X
X X XX X X XX X X X XX X X XX X
XX X XX X X XX X X X XX X X XX
X X X XX X X XX X X X XX X X XX
XX X X XX X X XX X X X XX X X X
X XX X X XX X X XX X X X XX X X
X XX X X XX X X XX X X X XX X X
XX XX X X XX X X XX X X X XX X
X X XX X X XX X X XX X X X XX X
XX X XX X X XX X X XX X X X XX
X X X XX X X XX X X XX X X X XX
XX X X XX X X XX X X XX X X X X
X XX X X XX X X XX X X XX X X X
XX XX X X XX X X XX X X XX X X X
X X XX X X XX X X XX X X XX X X
X X XX X X XX X X XX X X XX X X
X X X XX X X XX X X XX X X XX X
X X X XX X X XX X X XX X X XX X
X X X X XX X X XX X X XX X X XX
XX X X X XX X X XX X X XX X X XX
XX X X X XX X X XX X X XX X X X
X XX X X X XX X X XX X X XX X X
我还没有仔细分析它,但是乍一看似乎已经模拟了前几行和几列,那么其余的模式只是对角线扩展。