FishHook
В общем вот решение быстрее моего предыдущего на 500х500 в 800 раз
может во мне проблема..
вот код этой задачи который я отправил.
def fn(field, n, m):
matrix = []
for row in field:
matrix.append([x == "#" for x in row])
beds = 0
mapping = {}
groups = {}
for row_num, row in enumerate(matrix):
for col_num, cell in enumerate(row):
if not cell:
continue
neighbors = []
if row_num > 0:
if matrix[row_num - 1][col_num]:
neighbors.append((row_num - 1, col_num))
if col_num < m - 1:
if matrix[row_num][col_num + 1]:
neighbors.append((row_num, col_num + 1))
if row_num < n - 1:
if matrix[row_num + 1][col_num]:
neighbors.append((row_num + 1, col_num))
if col_num > 0:
if matrix[row_num][col_num - 1]:
neighbors.append((row_num, col_num - 1))
if not neighbors:
beds += 1
groups[beds] = [(row_num, col_num)]
continue
for neighbor in neighbors:
if neighbor in mapping:
bed_num = mapping[neighbor]
break
else:
beds += 1
bed_num = beds
mapping[(row_num, col_num)] = bed_num
groups.setdefault(bed_num, []).append((row_num, col_num))
redraw = None
for neighbor in neighbors:
if neighbor in mapping and mapping[neighbor] != bed_num:
redraw = mapping[neighbor]
mapping[neighbor] = bed_num
if redraw:
groups[redraw] = groups[bed_num]
del groups[bed_num]
for bed in groups[redraw]:
mapping[bed] = redraw
return len(groups)
n, m = input().split()
n = int(n)
m = int(m)
field = [ list(input()) for _ in range(n) ]
print(fn(field, n, m))

izekia
valorosoа покажи код с моей задачей, который ты отправляешь? может где-то там ошибка?
def solve1(N, M, case):
l = [[0] * M for i in range(N)]
n = 0
connected = set()
for i in range(N):
for j in range(M):
x = 0
if case[i][j] == '#':
if (i > 0 and l[i-1][j] != 0):
x = l[i-1][j]
left = l[i][j-1]
if (j > 0 and left != 0):
if x != left:
if x > 0:
connected.add(frozenset((x, left)))
else:
x = left
if x == 0:
n += 1
x = n
l[i][j] = x
#print('\n'.join(str(r) for r in case))
#print('\n'.join(str(r) for r in l))
#print(connected)
return n - len(connected)
N, M = map(int, input().split())
case = [ list(input()) for _ in range(N) ]
print(solve1(N, M, case))
вот логин/ пароль с сайта куда скидываю vobr/pythonpython
https://www.e-olymp.com/ru/problems/1065И большое спасибо за участие)