Ctrl K

Больше кусков с нулевым AND

Средняя
Дан массив неотрицательных целых чисел values. Его нужно разрезать на непрерывные куски так, чтобы каждый элемент попал ровно в один кусок. **Оценка** куска — побитовое AND всех его элементов. Среди всех разрезаний, у которых сумма оценок кусков минимально возможная, найдите такое, где кусков больше всего, и верните их количество.
Пример 1
values=[6, 1, 3, 4, 0, 5] → 3

Сумма оценок не может быть меньше 0. Кусками [6, 1], [3, 4] и [0] получаем оценки 0, 0, 0; последний элемент 5 не обнуляется сам, поэтому его приклеиваем к последнему куску: [0, 5]. Итого 3 куска.

Пример 2
values=[7, 5, 13] → 1

AND всего массива равен 5 & 7 & 13 = 5 > 0. Любое разбиение на несколько кусков даст сумму больше 5, поэтому кусок один.

Пример 3
values=[0, 0, 2] → 2
Ограничения
  • 1 ≤ len(values) ≤ 10⁵
  • 0 ≤ values[i] ≤ 2·10⁶
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиМаксимум двоичных строк после переворотов СредняяКомпании по четыре в кинозале СредняяПрибавить или удвоить всё СредняяУдвоения ради наибольшего OR СредняяСамая сильная команда Средняя
загружаем Python…
Вход
values=[6, 1, 3, 4, 0, 5]
Ожидается
3

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