Ctrl K

Закрыть свободные клетки наклейками

Сложная
Дана доска board размером m × n: 0 — свободная клетка, 1 — занятая. Есть сколько угодно одинаковых прямоугольных наклеек высотой tall и шириной wide. Наклейки клеят по правилам: - каждая наклейка целиком лежит на доске и выровнена по клеткам; - поворачивать наклейки нельзя; - наклейка не может закрывать ни одной занятой клетки; - наклейки могут перекрываться, их число не ограничено. Верните True, если можно наклеить наклейки так, чтобы каждая свободная клетка оказалась закрыта, и False иначе.
Пример 1
board=[[0, 0, 0], [0, 0, 0], [1, 0, 0]], tall=2, wide=2 → True

Подходят три наклейки 2×2 с левыми верхними углами в клетках (0, 0), (0, 1) и (1, 1): вместе они закрывают все свободные клетки и не задевают занятую в левом нижнем углу.

Пример 2
board=[[0, 1, 0], [0, 0, 0]], tall=2, wide=2 → False

Любая наклейка 2×2 на этой доске задевает занятую клетку в середине верхней строки, поэтому клеить нечего, а свободные клетки есть.

Пример 3
board=[[1, 1], [1, 1]], tall=3, wide=3 → True

Свободных клеток нет, закрывать нечего — ответ True, хотя наклейка даже не помещается на доску.

Ограничения
  • m = len(board), n = len(board[i])
  • 1 ≤ m, n ≤ 10⁵
  • 1 ≤ m · n ≤ 2 · 10⁵
  • board[i][j] равно 0 или 1
  • 1 ≤ tall, wide ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый доходный участок под лимитом СложнаяСамый тяжёлый день чтения СложнаяПрямоугольники с заданной суммой СложнаяРазрезать торт с ягодами СложнаяКомпания в одном ряду Сложная
загружаем Python…
Вход
board=[[0, 0, 0], [0, 0, 0], [1, 0, 0]], tall=2, wide=2
Ожидается
True

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