Рассмотрим двоичные блочные диагональные матрицы, которые имеют квадратные блоки 1 на главной диагонали и равны 0 везде. Будем называть такие матрицы «действительными» матрицами.
Например, вот некоторые допустимые матрицы 4x4:
1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1
0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1
Обратите внимание, что альтернативный способ описания таких матриц состоит в том, что существует цепочка из блоков квадрата 1 от верхнего левого угла до нижнего правого, касаясь угла к углу, и везде остальное равно 0.
Для контраста, вот некоторые недопустимые матрицы 4x4:
1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
Вам будет дано n
по n
бинарной матрице в качестве входных данных - какое минимальное количество 0
битов вам нужно задать 1
, чтобы получить действительную матрицу?
Вы можете написать функцию или программу взятие в любом удобной строке, список или матрице формате , представляющее собой n
по n
матрице 0 и 1 ( до тех пор , как он не препроцессор). Строки должны быть четко разделены, поэтому форматы, такие как одномерный массив битов, не допускаются.
Это код-гольф , поэтому цель состоит в том, чтобы минимизировать количество байтов в вашей программе.
Примеры
Например, если вход
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
тогда ответ 5, так как вы можете установить пять 0
битов, 1
чтобы получить:
1 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 1 0
0 0 0 0 1
и это минимальное количество требуется. Однако, если вход был
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
тогда ответ - 24, поскольку единственная действительная матрица 5x5, где справа вверху - 1
это матрица всех 1
s.
Контрольные примеры
Тесты представлены здесь как двумерный массив целых чисел.
[[0]] -> 1
[[1]] -> 0
[[0,1],[0,0]] -> 3
[[1,0],[0,0]] -> 1
[[0,0,0],[0,1,0],[0,0,0]] -> 2
[[0,1,0],[0,0,0],[0,1,0]] -> 7
[[0,1,0],[1,0,0],[0,0,1]] -> 2
[[1,1,1],[1,1,1],[1,1,1]] -> 0
[[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,0]] -> 4
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] -> 8
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,1,0]] -> 14
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,1,0,0]] -> 14
[[0,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 7
[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 11
[[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,1]] -> 5
[[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 24
[[0,0,0,1,0],[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 23
[[0,1,0,0,0],[1,0,0,0,0],[0,0,1,0,0],[0,0,0,0,1],[0,0,0,1,0]] -> 4
[[0,1,1,1,0],[0,1,1,0,1],[0,1,1,1,0],[0,1,0,0,1],[0,0,0,0,0]] -> 14
Ноты
- Задача, связанная с данной: Распечатать блочно-диагональную матрицу
- Вдохновение: Freedom Factory, Google Code Jam 2016, задача 2D
источник