Ctrl K

Мало нулей или мало единиц: запросы на отрезках

Сложная
Дана строка bits из символов 0 и 1 и число cap. Назовём строку перекошенной, если в ней не больше cap нулей **или** не больше cap единиц (подходит любое из двух условий). Дан также список запросов ranges, где каждый запрос — пара [l, r]. Для запроса рассмотрим кусок bits[l..r] (оба конца включительно) и посчитаем, сколько у этого куска перекошенных подстрок. Подстроки на разных позициях считаются отдельно. Верните список ответов в том же порядке, что и запросы.
Пример 1
bits="00110", cap=1, ranges=[[0, 4], [1, 3]] → [12, 6]

Во всей строке 15 подстрок; не подходят "0011", "00110" и "0110" — в каждой хотя бы по два нуля и две единицы. Получаем 12. В куске "011" перекошены все 6 подстрок.

Пример 2
bits="1", cap=1, ranges=[[0, 0]] → [1]

Единственная подстрока "1" содержит ноль нулей.

Ограничения
  • 1 ≤ len(bits) ≤ 10⁵
  • Каждый символ bits — 0 или 1
  • 1 ≤ cap ≤ len(bits)
  • 1 ≤ len(ranges) ≤ 10⁵
  • 0 ≤ l ≤ r < len(bits)
  • Все запросы различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКороткий отрезок с нужной суммой СложнаяЯгоды вдоль тропинки СложнаяСумма на длину меньше лимита СложнаяСамая длинная серия станков в бюджет СложнаяСвязь в самом глухом селе Сложная
загружаем Python…
Вход
bits="00110", cap=1, ranges=[[0, 4], [1, 3]]
Ожидается
[12, 6]

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