Ctrl K

Три равные двоичные части

Сложная
Дан массив bits из нулей и единиц. Разрежьте его на три непустых куска подряд так, чтобы каждый кусок, прочитанный как двоичное число (старший разряд слева), давал одно и то же значение. Кусок читается целиком: [1, 1, 0] — это 6, а не 3. Ведущие нули допустимы: [0, 1, 1] и [1, 1] оба равны 3. Верните пару [i, j], где первый кусок — bits[0..i], второй — bits[i+1..j-1], третий — bits[j..] (так что i + 1 < j). Если разрезать так нельзя, верните [-1, -1]. Если в массиве есть хотя бы одна единица, подходящий разрез, если он существует, единственный. Если массив состоит из одних нулей, годится любой разрез — верните [0, len(bits) - 1].
Пример 1
bits=[0, 1, 1, 0, 1, 1, 0, 1, 1] → [2, 6]

Части [0, 1, 1], [0, 1, 1] и [0, 1, 1] — каждая равна 3. Первая кончается на индексе 2, третья начинается с индекса 6.

Пример 2
bits=[1, 0, 0, 1, 0] → [-1, -1]

Единиц две — поровну на три части их не разделить.

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

[1, 0], [1, 0] и [0, 1, 0] — все равны 2. Ноль на индексе 3 можно отдать только третьей части как ведущий: во второй он стал бы лишним младшим разрядом и удвоил бы её.

Ограничения
  • 3 ≤ len(bits) ≤ 3 · 10⁴
  • bits[i] равно 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЗвёзды на одной прямой СложнаяГде встретиться друзьям СложнаяПересечёт ли робот свой след СложнаяВерёвка вокруг столбов СложнаяСобрать 24 Сложная
загружаем Python…
Вход
bits=[0, 1, 1, 0, 1, 1, 0, 1, 1]
Ожидается
[2, 6]

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