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.