Ctrl K

Строки из блоков

Средняя
Рассмотрим строки из символов 0 и 1. Разобьём строку на блоки — максимальные отрезки одинаковых символов подряд: например, у 0011101 блоки 00, 111, 0, 1. Строка подходит, если: - её длина от shortest до longest включительно; - длина каждого блока из единиц делится на ones_step; - длина каждого блока из нулей делится на zeros_step. Сколько всего подходящих строк? Ответ может быть огромным — верните его по модулю 10⁹ + 7.
Пример 1
shortest=3, longest=4, ones_step=2, zeros_step=1 → 8

Единицы должны идти блоками чётной длины, нули — любыми. Длины 3: «000», «110», «011». Длины 4: «0000», «1100», «0110», «0011», «1111». Всего 8.

Пример 2
shortest=1, longest=5, ones_step=3, zeros_step=5 → 2

Подходят только «111» и «00000»: любая другая строка содержит блок неподходящей длины.

Пример 3
shortest=2, longest=2, ones_step=1, zeros_step=1 → 4
Ограничения
  • 1 ≤ shortest ≤ longest ≤ 10⁵
  • 1 ≤ ones_step, zeros_step ≤ longest
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый длинный зеркальный кусок СредняяВсе правильные скобочные строки СредняяМеньше всего прыжков до конца СредняяСамая прибыльная серия дней СредняяДобраться до последней клетки Средняя
загружаем Python…
Вход
shortest=3, longest=4, ones_step=2, zeros_step=1
Ожидается
8

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