У вас есть входной массив размером m * n. Каждая ячейка в массиве заполняется либо P, либо T. Единственная операция, которую вы можете выполнить над массивом, - это перевернуть столбцы. Когда вы переворачиваете столбец, буквы во всех ячейках этого столбца переключаются (P становится T и наоборот). Если у вас есть «х» количество строк с одинаковыми буквами (например, PPPP), то вы получите точку. Разработайте алгоритм, который принимает массив и возвращает решение (какие столбцы нужно перевернуть) так, чтобы результирующий массив имел максимально возможное количество точек.
Примечание. Если существует несколько решений с наибольшим количеством баллов, выберите вариант с наименьшим количеством сальто. Пример:
Входной массив:
PPTPP
PPTPP
PPTTP
PPPTT
PPPTT
Выход:
3
Объяснение:
Решение, которое дает наивысшие баллы: Flip column no. 3
Тогда исходный массив будет:
PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT
//Total: 2 points
Обратите внимание, что можно также перевернуть столбцы 4 и 5, чтобы получить оценку два, но это требует дополнительного переворота.
Вы можете использовать любой удобный формат ввода для представления двумерного массива, а также любые два различных, но фиксированных значения для представления P
и T
.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.