Ctrl K

Сколько блоков упадёт

Сложная
Под потолком висит решётчатая панель размером m × n: panel[i][j] = 1 — в клетке есть блок, 0 — пусто. Строка 0 прилегает к потолку. Блок **держится**, если он в строке 0 или хотя бы один из четырёх соседних по стороне блоков держится. По панели по очереди наносят удары strikes[i] = [row, col]. Удар выбивает блок из этой клетки, если он там есть. После этого все блоки, которые перестали держаться, сразу падают и исчезают из панели (на другие блоки они не ложатся). Верните массив, где i-й элемент — сколько блоков упало после i-го удара. Сам выбитый блок не считается. Удар может прийтись в пустую клетку — тогда ничего не падает.
Пример 1
panel=[[0, 1, 0], [1, 1, 1], [1, 0, 1]], strikes=[[1, 1]] → [4]

Весь нижний узор держался только на центральном блоке. Когда его выбили, падают четыре блока: два по бокам во втором ряду и два в третьем.

Пример 2
panel=[[1, 1], [1, 1]], strikes=[[1, 0], [0, 1], [0, 0]] → [0, 1, 0]

Первый удар убирает один блок, остальные держатся. После второго удара у блока (1, 1) не остаётся опоры: (0, 1) только что выбит, а (1, 0) выбит раньше, поэтому он падает. Третий удар выбивает последний блок, падать больше нечему.

Пример 3
panel=[[1, 0], [0, 0]], strikes=[[1, 1]] → [0]

Удар пришёлся в пустую клетку — ничего не падает.

Ограничения
  • 1 ≤ m, n ≤ 200
  • panel[i][j] равно 0 или 1
  • 1 ≤ len(strikes) ≤ 4·10⁴
  • 0 ≤ row < m, 0 ≤ col < n
  • Все удары приходятся в разные клетки
  • До первого удара все блоки держатся
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПереправа в прилив СложнаяЗасыпать одну клетку СложнаяУровни клеток по строкам и столбцам СложнаяПоследний день сухой переправы СложнаяСжать таблицу чисел Сложная
загружаем Python…
Вход
panel=[[0, 1, 0], [1, 1, 1], [1, 0, 1]], strikes=[[1, 1]]
Ожидается
[4]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 87 тестов на сервере, включая скрытые.