填充NxM矩阵,使得A [i,j] = A [i-1,j] NAND A [i,j-1]

时间:2018-09-15 20:19:34

标签: python-3.x algorithm performance matrix dynamic-programming

输入

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]))

1 个答案:

答案 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 

我还没有仔细分析它,但是乍一看似乎已经模拟了前几行和几列,那么其余的模式只是对角线扩展。