1609 - Contando Carneirinhos

Um problema que vai te fazer dormir melhor à noite...

Descrição

Solução

Você pode fazer a contagem dos carneirinhos distintos colocando todos os carneirinhos que você for lendo em um conjunto e depois vendo o tamanho do conjunto; ou usando um vetor de booleanos e contabilizar toda vez que um carneirinho passa de falso para verdadeiro.

Outra forma de resolver este problema para linguagens que não têm o recurso de conjuntos é ordenar todos os carneirinhos e usar a ordenação para distinguir e contar os carneirinhos diferentes.

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

int comp(const void* a, const void* b){
    return *(int*)a - *(int*)b;
}

int main(){
    int T, N, resposta;
    int carneirinhos[10000];

    scanf("%d", &T);

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

        resposta = 1;
        memset(carneirinhos, 0, sizeof(carneirinhos));

        for(int j = 0; j < N; ++j){
            scanf("%d", &carneirinhos[j]);
        }

        qsort(carneirinhos, N, sizeof(int), comp);

        for(int j = 1; j < N; ++j){
            if(carneirinhos[j - 1] != carneirinhos[j]){
                ++resposta;
            }
        }

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

    return 0;
}

Last updated