Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1471. Mostrar todas as postagens
Mostrando postagens com marcador 1471. Mostrar todas as postagens

segunda-feira, 15 de fevereiro de 2021

URI (BEECROWD) - 1471 - Mergulho - Ad-Hoc - C e C++

Salve, pessoal! Mais um problema Ad-hoc! A solulão do Mergulho está aqui para vocês! Bom proveito a todos!

Plataforma: URI (BEECROWD)

Problema1471

Enunciado:

O recente terremoto em Nlogônia não chegou a afetar muito as edificações da capital, principal epicentro do abalo. Mas os cientistas detectaram que o principal dique de contenção teve um dano significativo na sua parte subterrânea que, se não for consertado rapidamente, pode causar o seu desmoronamento, com a consequente inundação de toda a capital.

O conserto deve ser feito por mergulhadores, a uma grande profundidade, em condições extremamente difíceis e perigosas. Mas como é a sobrevivência da própria cidade que está em jogo, seus moradores acudiram em grande número como voluntários para essa perigosa missão.

Como é tradicional em missões perigosas, cada mergulhador recebeu no início do mergulho uma pequena placa com um número de identificação. Ao terminar o mergulho, os voluntários devolviam a placa de identificação, colocando-a em um repositório.

O dique voltou a ser seguro, mas aparentemente alguns voluntários não voltaram do mergulho. Você foi contratado para a penosa tarefa de, dadas as placas colocadas no repositório, determinar quais voluntários perderam a vida salvando a cidade.


Linguagens: C e C++


Solução:

Código em C:

#define TAM 10000
#include <stdio.h>
#include <string.h>
int main() {
    int n, r, v, i, mergulhadores[TAM] = {0};
    while (scanf("%d %d", &n, &r) != EOF) {
        i = r;
        while (i--) {
            scanf("%d", &v);
            mergulhadores[v-1] = 1;
        }
        if (n == r)
            printf("*\n");
        else {
            for (i = 0; i < n; i++)
                if (!mergulhadores[i])
                    printf("%d ", i + 1);
            printf("\n");
        }
        memset(mergulhadores, 0, TAM);
    }
    return 0;
}

Código em C++:

Basicamente a mesma solução, mas utilizei vector.

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, r, v, i;
    vector<int> mergulhadores(10000, 0);
    while (cin >> n >> r) {
        i = r;
        while (i--) {
            cin >> v;
            mergulhadores.push_back(v);
        }
        if (n == r)
            cout << "*" << endl;
        else {
            for (i = 0; i < n; i++)
                if (!(find(mergulhadores.begin(),mergulhadores.end(),i+1) != mergulhadores.end()))
                    cout << i + 1 << " ";
            cout << endl;
        }
        mergulhadores.clear();
    }
    return 0;
}

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