Solução por Thiago Mota
Conhecimento prévio necessário:
Nós temos um vetor e temos que fazer todos os números deles virarem com o menor número de operações. A soma do vetor é .
Nós podemos dividir o vetor em partes consecutivas de elementos com soma zero. Se a parte tem tamanho nós podemos usar todos os pares de vizinhos e transformar tudo em zero com operações.
Então, a soma do número de operações em cada uma dessas partes gera uma resposta onde é o número de partes. Então para minimizar a resposta temos que maximizar o número de partes.
Vamos calcular a soma de prefixos. Como as partes que nós procuramos tem soma zero, o prefixo no início e no final de cada uma será igual, logo podemos calcular a maior frequência entre todos os prefixos, a maior frequência será o número de partes que iremos dividir, logo a resposta é sendo a maior frequência. Segue o código: