Ctrl K

Сколько клеток зальёт вода

Сложная
Дана карта высот — прямоугольная матрица heights размером m × n — и массив уровней воды levels длины k. Для каждого уровня levels[i] вода льётся в левую верхнюю клетку (0, 0) и растекается так: клетка заливается, если её высота строго меньше уровня и в неё можно попасть из (0, 0), переходя между соседними по стороне клетками, каждая из которых тоже строго ниже уровня. Если сама клетка (0, 0) не ниже уровня, не заливается ничего. Верните массив answer длины k, где answer[i] — количество залитых клеток для уровня levels[i]. Уровни обрабатываются независимо друг от друга.
Пример 1
heights=[[2, 4], [3, 1]], levels=[3, 5, 1] → [1, 4, 0]

При уровне 3 вода заливает только стартовую клетку высотой 2: оба соседа (4 и 3) не ниже уровня. При уровне 5 заливается всё поле — 4 клетки. При уровне 1 даже стартовая клетка выше воды, ответ 0.

Пример 2
heights=[[1, 9, 1], [1, 9, 1], [1, 1, 1]], levels=[2, 10] → [7, 9]

При уровне 2 вода обходит «стену» из девяток снизу и заливает все семь клеток высотой 1, включая правый столбец. При уровне 10 заливаются все 9 клеток.

Ограничения
  • m = heights.length, n = heights[i].length
  • 2 ≤ m, n ≤ 1000
  • 4 ≤ m · n ≤ 10⁵
  • k = levels.length
  • 1 ≤ k ≤ 10⁴
  • 1 ≤ heights[i][j], levels[i] ≤ 10⁶
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПереправа в прилив СложнаяДальние прыжки по полю СложнаяМаршрут с самым высоким узким местом СредняяСамый пологий маршрут СредняяБлижайшие товары по карману Средняя
загружаем Python…
Вход
heights=[[2, 4], [3, 1]], levels=[3, 5, 1]
Ожидается
[1, 4, 0]

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