Pesquisar este blog

Livros Recomendados

sábado, 30 de janeiro de 2021

URI (BEECROWD) - 1267 - Biblioteca Pascal - Ad-hoc - C e C++

Nesse post resolvo "Biblioteca Pascal", um problema ad-hoc do beecrowd. É um problema que envolve estruturas de repetição, de condição e array. Na minha solução, uso também o operador ternário, que basicamente é uma estrutura condicional também. Veja abaixo e compare com a sua solução!

Plataforma: URI (BEECROWD)

Problema1267

Enunciado:

A Universidade Pascal é uma das mais antigas do país e precisa renovar seu edifício da biblioteca, porque depois de todos esses séculos o edifício começou a mostrar os efeitos de suportar o peso da enorme quantidade de livros que abriga.

Para ajudar na renovação, a Associação de Antigos Alunos da Universidade decidiu organizar uma série de jantares para angariação de fundos, para os quais todos os alunos foram convidados. Estes eventos provaram ser um enorme sucesso e vários foram organizados durante o ano passado. (Uma das razões para o sucesso desta iniciativa parece ser o fato de que os alunos que passaram pelo sistema de ensino Pascal tem boas lembranças daquele tempo e gostariam de ver a Biblioteca da Universidade renovada.)

Os organizadores mantiveram uma planilha indicando quais alunos participaram de cada jantar. Agora eles querem sua ajuda para determinar se algum aluno ou aluna participou de todos os jantares.


Linguagens: C e C++


Solução:

A estratégia dos códigos C e C++ é a mesma, utilizar um array de alumni e colocar 1 na posição dele se o valor for igual a zero. Se ele já tiver lido um valor diferente, vai acabar ignorando. Isso significa que as posições do vetor que tiverem o valor zero estarão assim porque tinham 1 em todos os jantares. Assim, basta criar mais um laço de repetição no fim verificando se há alguma posição do vetor com zero, se tiver a resposta já será yes.

Código em C:

#include <stdio.h>
#include <string.h>
int main() {
    int n, d;
    while (scanf("%d %d", &n, &d) != EOF) {
        if (!n)
            break;
        int alunos[n], r = 0, v, i;
        memset(alunos, 0, sizeof(alunos));
        while (d--) {
            for (i = 0; i < n; i++) {
                scanf("%d", &v);
                if (!v)
                    alunos[i] = 1;
            }
        }
        while (n)
            if (!alunos[--n]) {
                r = 1;
                break;
            }
        printf("%s\n", r? "yes" : "no");
    }
    return 0;
}

Código em C++:

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    
    int n, d, i, v, r;
    while (cin >> n >> d) {
        
        if (!n)
            break;

        int alunos[n];
        memset(alunos, 0, sizeof(alunos));
        r = 0;
        while (d--) {
            for (i = 0; i < n; i++) {
                cin >> v;
                if (!v)
                    alunos[i] = 1;
            }
        }

        while (n)
            if (!alunos[--n]) {
                r = 1;
                break;
            }
            
        cout << (r? "yes" : "no") << endl;
        
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas