Ctrl K

Пирамидальные участки на поле

Сложная
Поле задано матрицей field из нулей и единиц: 1 — плодородная клетка, 0 — бесплодная. Всё, что за пределами поля, считается бесплодным. **Пирамида** высоты h ≥ 2 с вершиной в клетке (r, c) — это клетки, которые занимают h строк подряд, начиная со строки r вниз: в строке r + d (для d от 0 до h - 1) это столбцы от c - d до c + d. То есть сверху одна клетка, под ней три, под ними пять и так далее. **Перевёрнутая пирамида** устроена так же, но растёт вверх: вершина (r, c) — нижняя клетка, а в строке r - d лежат столбцы от c - d до c + d. Участок годится, если все его клетки плодородные. Посчитайте общее число подходящих пирамид и перевёрнутых пирамид. Участки разной высоты с одной вершиной считаются по отдельности.
Пример 1
field=[[0, 1, 0], [1, 1, 1]] → 1

Одна пирамида: вершина в клетке (0, 1), под ней вся строка 1. Перевёрнутой нет — в строке 0 есть нули.

Пример 2
field=[[1, 1, 1], [1, 1, 1], [1, 1, 1]] → 4

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

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

Ряд под вершиной должен быть шириной 3, а в поле всего 2 столбца.

Ограничения
  • 1 ≤ число строк, число столбцов ≤ 1000
  • число строк × число столбцов ≤ 4 · 10⁵
  • field[i][j] равно 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый большой горящий блок СложнаяПереход через пещеру СложнаяСамый длинный подъём по карте СложнаяНедели отдыха с перелётами СложнаяЯгодное поле туда и обратно Сложная
загружаем Python…
Вход
field=[[0, 1, 0], [1, 1, 1]]
Ожидается
1

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