Solução Informática - Nivel Avançado - Semana 18

Escrito por Leonardo Paes.

Conhecimento prévio necessário:

Existem diversas soluções para esse problema. Uma solução que gosto muito utiliza apenas estruturas da STL, no caso o Set. A ideia principal do problema é: a solução que maximiza o dano causado no monstro seria do tipo: dano de todas os feitiços usados + 2*dano dos k maiores feitiços, onde k é a quantidade de feitiços de raio que Flúcio tem. Porque? Note que cada feitiço de raio duplica o próximo feitiço lançado, então por isso esse é o dano máximo. Porém, nem sempre é possível chegar nesse dano. No caso de termos os k maiores feitiços sendo do tipo raio, pois algum deles não duplicará o dano do outro, tendo que duplicar o dano de algum do tipo fogo.

Para codarmos isso de modo simples, utilizaremos 4 sets: Um mantendo os k maiores feitiços, um mantendo o resto dos feitiços, um mantendo todos os feitiços existentes do tipo fogo e outro mantendo todos os feitiços existentes do tipo raio. A melhor maneira de entender o código é dando uma olhada nele.

Código de exemplo: