1023 - Estiagem

Um problema um pouco estranho, mas bem tranquilo.

Descrição

Solução

Não parece muito claro, mas o objetivo desse problema é contabilizar quantas pessoas têm com o custo médio equivalente a cada valor, ou seja, precisamos agrupar as pessoas pelo consumo médio delas por pessoa na sua casa.

Por exemplo, vamos analisar o segundo caso de teste:

Pessoas

Consumo total

Consumo médio por pessoar

1

25

25

2

20

10

3

31

10

2

40

20

6

70

11

Como resposta, podemos agrupar 5 pessoas com consumo médio 10 (as 2 em uma casa e 3 em outra), 6 pessoas com consumo médio 11, 2 pessoas com consumo médio 20 e 1 com consumo médio 25.

Com isso, podemos usar o consumo médio como índice de um vetor de contagem para somar a quantidade de pessoas para cada consumo médio encontrado. Com valor mínimo de pessoas de 1 e valor máximo de consumo de 200, então o tamanho máximo do vetor é 200.

Para exibir o resultado truncado em duas casas decimais, pode-se fazer uma operação de piso da divisão no resultado da divisão multiplicado por 100 e, após isso, dividir novamente o número por 100.

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

int main()
{
    double consumo_medio;
    int T, N, X, Y, totalX, totalY, first, consumos[201];

    T = 0;
    while (scanf("%d", &N))
    {
        if (!N)
            break;

        if (T)
            printf("\n");

        memset(consumos, 0, sizeof(consumos));

        totalX = 0, totalY = 0;
        for (int i = 0; i < N; ++i)
        {
            scanf("%d %d", &X, &Y);

            totalX += X;
            totalY += Y;
            consumos[Y / X] += X;
        }

        printf("Cidade# %d:\n", ++T);
        first = 1;
        for (int i = 0; i < 201; ++i)
        {
            if (consumos[i] > 0)
            {
                if (first)
                    first = 0;
                else
                    printf(" ");

                printf("%d-%d", consumos[i], i);
            }
        }

        consumo_medio = ((100 * totalY) / totalX) / 100.0;
        printf("\nConsumo medio: %.2lf m3.\n", consumo_medio);
    }

    return 0;
}

Last updated