Código de Roger Benet, comentários de Rogério Júnior
Vamos simular o problema, ordenando as árvores por suas quantidades iniciais de frutos, para retirarmos as mortas de maneira eficiente.
Seja o vetor em que guardaremos quantos frutos cada árvore deu no dia anterior ao início da safra. Ordenaremos
e simularemos cada dia da safra. Em cada dia,
será a soma de todos os frutos dados no dia anterior ao início da safra por todas as árvores que ainda estão vivas,
será a quantidade de árvores vivas,
será a posição em
da menor árvore que ainda está viva e
é quantos frutos, a mais ou a menos, cada árvore dará em relação a como começou a safra.
Seja a resposta do problema (deveremos salvá-la como
). Para simularmos um dia da safra, primeiro leremos o caractere que diz se houve chuva ou estiagem. Se tiver chovido, todas as árvores vivas darão um fruto a mais, ou seja, o valor de
aumentará em uma unidade. Se, porém, houver estiagem, todas as árvores vivas produzirão um fruto a menos, logo o valor de
decresce em uma unidade. Se
alguma árvore pode ter morrido. Como o número de frutos que a árvore
dá é
, uma árvore terá morrido neste dia se
. Sabendo isso, procuraremos em
as árvores que já morreram. Partindo da árvore viva que está dando menos frutos (a da posição
) para a direita, se a árvore que estamos olhando tiver morrido, o valor de
diminui uma unidade, o de
aumenta uma unidade (pois agora a árvore viva com menos frutos está uma posição à direita) e subtraímos a sua quantidade original de frutos do valor de
, visto que esta soma é apenas para árvores vivas. Se a árvore não tiver morrido, não precisaremos procurar mais, pois todas à sua direita têm mais frutos que ela. No fim do dia, adicionamos a
a colheita do dia, que será
.
Após a simulação, basta imprimirmos o valor de . Segue o código adaptado do nosso leitor Roger Benet como solução para o problema proposto.