Ctrl K

Сбалансированный набор строк

Сложная
Дана таблица table из нулей и единиц, все её строки попарно различны. Непустой набор из k строк назовём *сбалансированным*, если в каждом столбце сумма выбранных строк не больше ⌊k / 2⌋. Найдите сбалансированный набор с наименьшим числом строк и верните индексы его строк по возрастанию. Если таких наборов несколько, верните тот, у которого список индексов лексикографически наименьший. Если сбалансированного набора нет совсем, верните пустой список. Подсказка: столбцов не больше пяти. Подумайте, бывает ли так, что маленького сбалансированного набора нет, а большой есть.
Пример 1
table=[[1, 1, 0], [1, 0, 1], [0, 1, 0], [0, 0, 1]] → [0, 3]

Нулевой строки нет. Строки 0 и 1 обе имеют 1 в столбце 0, а строки 0 и 3 — нет общих единиц: в каждом столбце сумма не больше 1 = ⌊2 / 2⌋. Пара (0, 3) — первая такая по порядку.

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

Строка 1 целиком из нулей — набор из неё одной уже сбалансирован, и меньше не бывает.

Пример 3
table=[[1, 1], [1, 0], [0, 1]] → [1, 2]

Строки 1 и 2 не имеют общих единиц, так что ответ [1, 2].

Ограничения
  • 1 ≤ len(table) ≤ 10⁴
  • 1 ≤ len(table[i]) ≤ 5
  • table[i][j] — 0 или 1
  • Все строки table попарно различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПогасить все лампы СложнаяДорешать судоку СложнаяШахматка перестановками строк и столбцов СложнаяКлючи и двери в лабиринте СложнаяТройки с нулевым AND Сложная
загружаем Python…
Вход
table=[[1, 1, 0], [1, 0, 1], [0, 1, 0], [0, 0, 1]]
Ожидается
[0, 3]

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