精華區beta Marginalman 關於我們 聯絡資訊
龍大心情不好 心理醫生建議他朝牆壁丟石頭紓壓 龍大真的很調皮 每丟一塊就會計算有多少磚塊被他砸落 龍大:哈哈,這面牆就跟邊版一樣被我搞崩了 路人看到調皮的龍大指責他的不是 龍大:甘你屁事@@ Python code: class Solution: def hitBricks(self, grid: List[List[int]], hits: List[List[int]]) -> List[int]: m, n = len(grid), len(grid[0]) root = list(range(m*n+1)) group = [1]*(m*n+1) group[m*n] = 0 def find(x): if root[x] != x: root[x] = find(root[x]) return root[x] def union(a, b): ra, rb = find(a), find(b) if ra != rb: root[ra] = rb group[rb] += group[ra] for index, (i, j) in enumerate(hits): if grid[i][j] == 1: grid[i][j] = 0 else: hits[index] = [-1,-1] for i in range(m): for j in range(n): if grid[i][j]: if i != m-1 and grid[i+1][j] == 1: union(i*n + j, (i+1)*n + j) if j != n-1 and grid[i][j+1] == 1: union(i*n + j, i*n + j + 1) if i == 0: union(i*n + j, m*n) res = [0]*len(hits) dx = [0,0,1,-1] dy = [1,-1,0,0] for i in range(len(hits)-1, -1, -1): origin = group[find(m*n)] if hits[i] != [-1, -1]: x, y = hits[i] grid[x][y] = 1 if x == 0: union(x*n + y, m*n) for j in range(4): adjx, adjy = x+dx[j], y+dy[j] if 0 <= adjx < m and 0 <= adjy < n and grid[adjx][adjy] == 1: union(x*n + y, adjx*n + adjy) res[i] = group[find(m*n)] - origin - (find(x*n+y) == find(m*n)) else: res[i] = 0 return res 我也忘記這題在幹嘛了 -- 蛤? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.252.3.181 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1674718713.A.67A.html
ririoshi: 靠北 01/26 15:38
Benbenyale: 想著BOE 下班距離我更近了 01/26 15:39
uiojkl789: 笑死 01/26 15:39
k960608: 你敢質疑BOE的行為? 01/26 15:40
HuiXillya: 靠杯 01/26 15:45
DDFox: 大師 01/26 15:57
Rushia: 笑死 01/26 18:02