Você tem uma matriz de entrada do tamanho m * n. Cada célula da matriz é preenchida com P ou T. A única operação que você pode executar na matriz é inverter colunas. Quando você inverte uma coluna, as letras em todas as células dessa coluna mudam (P se torna T e vice-versa). Se você tiver o número 'x' de linhas com a mesma letra (por exemplo, PPPP), receberá um ponto. Projete um algoritmo que capte a matriz e retorne uma solução (que colunas virar), para que a matriz resultante tenha o número máximo de pontos possível.
Nota: Caso haja várias soluções que produzam a pontuação mais alta, escolha aquela com o menor número de lançamentos. Exemplo:
Matriz de entrada:
PPTPP
PPTPP
PPTTP
PPPTT
PPPTT
Resultado:
3
Explicação:
Uma solução que gera os pontos mais altos: Inverter a coluna no. 3
Então a matriz original seria:
PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT
//Total: 2 points
Observe que também é possível virar as colunas 4 e 5 para obter uma pontuação de dois, mas isso precisa de uma virada adicional.
Você pode usar qualquer formato de entrada conveniente para representar a matriz bidimensional e também dois valores distintos, mas fixos, para representar P
e T
.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.