Solução escrita por João Pedro Castro
Conhecimento prévio necessário:
Primeiro vamos tentar achar uma maneira de conferir se para um fixo conseguimos ou não coletar os
pokédolares. Uma solução para essa tarefa é simplesmente ordenar o vetor
(guarda quantidade de pokédolares recebidos ao capturar um pokéamigo) de forma decrescente, e 0-indexado, para então no i-ésimo dia capturar o pokéamigo equivalente a posição
do vetor ordenado (se essa posição for válida), indo de
.
É fácil de entender por que isso funciona, já que ordenando o vetor de forma decrescente você sempre vai usar os de maior valor primeiro, o que garante que a quantidade deles a serem capturados é sempre do que dos outros. De forma exemplificada, o que estamos fazendo é indo da posição
repetidas vezes até os
dias passarem, portanto, escolha a forma de implementar que você preferir. Note que dessa forma o
não tem a mesma definição do enunciado, pois deveríamos seguir mais um dia até voltar para o primeiro (por exemplo, fazemos
ao invés de
com
), para corrigir isso é só usar
ao imprimir a resposta.
Agora, para achar o correto devemos executar uma busca binária tentando encontrar o maior valor aceito possível, com os limites sendo
e
. O motivo do
é que se o
pode ser maior que o próprio
, ele pode ir até o infinito, já que ele vai somar as mesmas
posições toda vez, e elas vão ser sempre maiores que
. Agora, se o ponteiro da esquerda/direita (eles coincidem no final) acabar em
, isso significa que é impossível, pois nem o
funcionou.