1. 程式人生 > >2維矩陣前綴和技巧題目

2維矩陣前綴和技巧題目

hid IE IV 分享 無聊 ret CA col pen

技術分享圖片
#下面這一段用一個txt來保存input的信息來模擬input.最後提交代碼時候刪除這一段即可.
a9999=open(1.txt,r)
def input():
    return a9999.readline()
#結束.

‘‘‘
一閃一閃亮晶晶,滿天都是小星星,牛牛晚上閑來無聊,便躺在床上數星星。
牛牛把星星圖看成一個平面,左上角為原點(坐標為(1, 1))。現在有n顆星星,他給每顆星星都標
上坐標(xi,yi),
表示這顆星星在第x行,第y列。
現在,牛牛想問你m個問題,給你兩個點的坐標(a1, b1)(a2,b2),表示一個矩形的左上角的點坐標
和右下角的點坐標,請問在這個矩形內有多少顆星星(邊界上的點也算是矩形內)。
‘‘‘ #2維矩陣前綴和.用O(N)的速度來得到. a=[[0,0,1,1],[1,1,1,1],[0,1,1,0],[1,0,0,1]] b=[[0 for i in range(len(a[0]))] for i in range(len(a))] tmp=[0] for i in a: tmp.append(tmp[-1]+i[0]) tmp.pop(0) for i in range(len(b)): for j in range(len(b[0])): #b[i][j]表示矩陣a[i][j]到左上角組成的矩陣一共有多少個1. if i==0: b[i][j]
=sum(a[i][:j+1]) elif j==0: b[i][j]=tmp[i] else: b[i][j]=b[i-1][j]+b[i][j-1]+a[i][j]-b[i-1][j-1] print(b)
View Code

2維矩陣前綴和技巧題目