Solução Feira de Bactérias

0 Flares Facebook 0 0 Flares ×

Solução por Rogério Júnior

A grande dificuldade do problema é o fato de os números envolvidos ficarem muito grandes, estourando os valores de int e de long long int. Porém, podemos comparar se um número é maior que o outro apenas pelos seus logaritmos, que são bem menores que os números originais. Existe uma função da cmath chamada double log(double x) que recebe uma double como parâmetro e retorna o valor de seu logaritmo natural (como outra double).

Note que a quantidade de bactéria formadas por uma colônia que irá durar por C dias, onde cada bactéria irá gerar outras D descendentes é exatamente D^C, pois a cada dia a população será multiplicada por D (cada bactéria terá D filhos) e esse processo irá se repetir exatamente C vezes. Logo, basta encontrarmos o maior valor de log(DC) = C*log(D). Para isso basta percorrermos toda a entrada, guardando o valor do log da maior colônia já encontrada em maior. Toda vez que encontrarmos uma colônia que terá mais bactérias que a salva, guardamos seu id (identificação da colônia) e atualizamos o valor de maior para o log da sua quantidade de bactérias. Após lermos a entrada, basta imprimirmos o valor salvo em maior. Seguem o código adaptado e os comentários do nosso leitor Roger Benet, que conseguiu resolver o problema em C++. Note que ele chama de max_atual a nossa variável maior.

0 Flares Facebook 0 0 Flares ×
0 Flares Facebook 0 0 Flares ×
%d bloggers like this: