Ctrl K

Куски с заданным AND и дешёвые хвосты

Сложная
Даны массив положительных чисел values длины n и массив targets длины m. Разрежьте values на ровно m непустых подряд идущих кусков (каждый элемент попадает ровно в один кусок, порядок не меняется) так, чтобы побитовое AND всех элементов j-го слева куска было равно targets[j]. Стоимость разреза — сумма последних элементов всех кусков. Верните наименьшую возможную стоимость или -1, если разрезать так нельзя.
Пример 1
values=[6, 5, 12, 4, 7], targets=[4, 4] → 12

Подходят два разреза: [6, 5] | [12, 4, 7] (6 & 5 = 4, 12 & 4 & 7 = 4) и [6, 5, 12] | [4, 7] (6 & 5 & 12 = 4, 4 & 7 = 4). Их стоимости 5 + 7 = 12 и 12 + 7 = 19, ответ 12. Разрез [6, 5, 12, 4] | [7] не годится: AND второго куска равен 7, а не 4.

Пример 2
values=[3, 3, 3], targets=[3] → 3

Кусок один — весь массив; его AND равен 3, а последний элемент 3.

Пример 3
values=[8, 1, 9], targets=[1, 9] → -1

Первый кусок должен давать AND 1, но 8 & 1 = 0, а 8 сам по себе не равен 1 — разрезать нельзя, ответ -1.

Ограничения
  • 1 ≤ n = len(values) ≤ 10⁴
  • 1 ≤ m = len(targets) ≤ min(n, 10)
  • 1 ≤ values[i] < 10⁵
  • 0 ≤ targets[j] < 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПобитовое И отрезка поближе к цели СложнаяРейсы парома со склада СложнаяДве равные команды с близкими суммами СложнаяРастущая цепочка мелкими шагами СложнаяКрутая подпоследовательность с наибольшей суммой Сложная
загружаем Python…
Вход
values=[6, 5, 12, 4, 7], targets=[4, 4]
Ожидается
12

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