Войти Регистрация
Алгоритмы

146. Сколько различий в настройках уведомлений

Средняя

У каждого клиента 16 переключателей уведомлений: пуши о покупках, письма о кешбэке и так далее. Настройки клиента i записаны числом masks[i] от 0 до 65 535: бит b равен 1, если переключатель b включён.

Различие пары клиентов — число переключателей, которые у них стоят по-разному, то есть число единиц в masks[i] XOR masks[j].

Верните сумму различий по всем парам i < j.

В работе: Аналитик сравнивает, насколько разнятся настройки в сегменте из 100 000 клиентов, прежде чем менять настройки по умолчанию.

Пример 1

Ввод
masks = [5, 3, 6]
Вывод
6

101 и 011 — 2 различия, 101 и 110 — 2, 011 и 110 — 2. Итого 6.

Пример 2

Ввод
masks = [7]
Вывод
0

Один клиент — пар нет.

Ограничения

  • 0 ≤ длина masks ≤ 10⁵
  • 0 ≤ masks[i] ≤ 65 535
  • Лимит — 3 с на тест (3000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def total_flag_diff(masks):
Битовые операцииПодсчётцельO(n)

Источник: наша задача на данных Альфа-Банка. Условие пересказано своими словами.