Hackerrank Проблема: Учитывая матрицу M * N, где каждая ячейка может иметь значение 0,1 или 2, ячейка со значением 1 может быть преобразована в 2
если у него есть как минимум 3 соседние ячейки со значением 2. Выясните все возможные преобразования за один проход (т.е. преобразованная ячейка не может использоваться для преобразования другой ячейки)
Ограничения: нет
Мой подход:
- Сохранение ввода в 2d матрице
- Итерация по каждой ячейке и для каждой ячейки со значением 1:
я) Получить список соседних ячеек, которые имеют значение 2 (сбросить неверно
индексы ячеек, когда текущая ячейка находится в крайних столбцах)
ii) Увеличьте POSSIBLE_CONVERSIONS на 1, если размер списка>> 3
Вот мое решение на Python:
import sys
data = sys.stdin.readlines()
dim = data.pop(0)
r = int(dim.split(' ')[0])
c = int(dim.split(' ')[1])
mat = []
def getElem(c, mat, index):
return mat[int(index/c)][int(index % c)]
for line in data:
arr = list(map(int, line.split()))
mat.append(arr)
possibleConversions = 0
for i in range(0,r):
for j in range(0,c):
if mat[i][j] != 1:
continue
idx = (i * c) + j
adjIndices = []
if idx % c == 0:
adjIndices = [(idx - c), (idx - c + 1), (idx + 1), (idx + c), (idx + c + 1)]
elif (idx + 1) % c == 0:
adjIndices = [(idx - c -1), (idx - c), (idx - 1), (idx + c - 1), (idx + c)]
else :
adjIndices = [(idx - c -1), (idx - c), (idx - c + 1), (idx - 1), (idx + 1), (idx + c - 1), (idx + c), (idx + c + 1)]
adjIndices = [index for index in adjIndices if ((index >= 0) and (index < (r*c) and (getElem(c, mat, index) == 2)))]
if (len(adjIndices) >= 3) :
possibleConversions += 1
print(possibleConversions)
Это похоже на прохождение 2 тестовых случаев и обнаружение ошибки времени выполнения для остальных 4 скрытых случаев.
Любые идеи относительно того, что может быть разрушено?
Я пробовал то же решение в Java, где оно ломается при принятии ввода (используя либо Scanner, либо BufferedReader) для 4 тестовых случаев
(потратили 3 дня на то, чтобы биться головой об стену)
Редактировать 1 : размещение попытки, за исключением блока кода:
if mat[i][j] != 1:
continue
, кажется, вызывает блок исключения для всех 4 скрытых тестовых случаев. В настоящее время я подозреваю, что при большой матрице выполнение должно быть истекло.
Редактировать 2 : исключить предыдущую теорию, произвольно установив строку или столбец равным 10, если размер строки или столбца> 100, и все еще видя ошибку RT.