1170 - Blobs

Mais um dia, mais um problema Ad-Hoc... Não, pera...

Descrição

Solução

Alternativa 1 - Cálculo direto

Saber quantas vezes precisamos dividir um número até que o resultado seja 1 ou menos é basicamente calcular o teto do logaritmo deste número.

#include <stdio.h>
#include <math.h>

int main()
{
    double C;
    int N, resposta;

    scanf("%d", &N);

    for (int i = 0; i < N; ++i)
    {
        scanf("%lf", &C);

        printf("%d dias\n", (int)ceil(log2(C)));
    }

    return 0;
}

Alternativa 2 - Simulação do processo

Tudo o que você precisa é simular cada dia e quantos suprimentos Blobs terá ao final do dia. Se a quantidade de suprimento for menor ou igual a 1, pode parar o processo e imprimir a resposta.

#include <stdio.h>

int main()
{
    double C;
    int N, resposta;

    scanf("%d", &N);

    for (int i = 0; i < N; ++i)
    {
        scanf("%lf", &C);

        resposta = 0;
        while (C > 1.0)
        {
            ++resposta;
            C /= 2;
        }

        printf("%d dias\n", resposta);
    }

    return 0;
}

Last updated