Escrito por Estela Baron
Conhecimento prévio necessário:
Nesse problema, queremos descobrir se existe alguma maneira de escolhermos vizinhos tal que a soma de seus brigadeiros tenha resto
na divisão por
. Para isso, vamos construir um vetor
que guarde o resto da soma de
por
em
(semelhante a uma soma de prefixos normal, mas com restos).
- se
, então achamos uma solução – escolher os vizinhos de
até
. - se
, com
, então
. Ou seja, se
, então
e, portanto, temos a solução de escolher os vizinhos de
até
.
Logo, como visto anteriormente, quando há um resto igual a
ou dois restos iguais, temos uma solução.
Uma observação extremamente importante de se fazer é que
, pois isso nos garante que sempre haverá uma quantidade maior ou igual a
de restos em
.
Portanto, como há pelo menos
restos, pelo Princípio da Casa dos Pombos, ou haverá um resto zero, ou haverá pelo menos um resto repetido (sem o zero, sobram
restos diferentes para pelo menos
posições). Como consequência, sempre haverá uma solução.
A complexidade da solução é
para cada caso teste.
Recomendamos que você tente implementar o problema antes de ver o código.Veja a implementação nesse link.
