Pesquisar este blog

Livros Recomendados

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

domingo, 3 de janeiro de 2021

URI - 1136 - Ad-Hoc - Bingo! - C++

Plataforma: URI

Problema1136

Enunciado:

Albert, Charles e Mary inventaram uma nova versão do clássico jogo de Bingo. Na versão tradicional, o jogo é presidido por um não-jogador conhecido como caller. No começo de cada partida, cada jogador recebe uma carta contendo uma única combinação de números de 0 até N dispostos em colunas e linhas. O caller opera um globo contendo N+1 bolas numeradas de 0 até N. Em cada turno, o caller sorteia uma bola do globo, anuncia o número sorteado aos jogadores e não a coloca novamente no globo. Cada jogador procura pelo número em sua carta e o marca caso o encontre. O primeiro jogador que marcar um padrão pré-definido completo em sua carta (uma linha horizontal, por exemplo) ganha um prêmio.

Na versão Albert-Charles-Mary, em cada turno, o caller sorteia uma primeira bola, coloca-a de volta no globo, sorteia uma segunda bola, coloca-a de volta no globo, e então anuncia a diferença absoluta entre os números das duas bolas. Para aumentar o entusiasmo, antes do início da partida, um subconjunto possivelmente vazio de bolas é retirado do globo, de forma que ao menos duas bolas permaneçam no globo. Eles gostariam de saber se cada número de 0 até N podem ainda ser anunciados utilizando a nova regra de sorteio e considerando apenas as bolas que permaneceram dentro do globo.

Linguagem: C++

Solução:

#include <iostream>
#include <set>
#include <vector>
using namespace std;
int main() {
    int n, b, v;
    set<int> diferencas;
    vector<int> valores;
    while (cin >> n >> b) {
        if (!n && !b)
            break;
        for (int i = 0; i < b; i++) {
            cin >> v;
            valores.push_back(v);
        }
        for (int i = 0; i < b; i++) {
            for (int j = i; j < b; j++) {
                v = valores.at(i) - valores.at(j);
                v = (v < 0? -v : v);
                diferencas.insert(v);
            }
        }
        if (n + 1 != diferencas.size())
            cout << "N" << endl;
        else
            cout << "Y" << endl;
        valores.clear();
        diferencas.clear();
    }
    return 0;
}

URI - 1136 - Ad-Hoc - Bingo! - C

Plataforma: URI

Problema1136

Enunciado:

Albert, Charles e Mary inventaram uma nova versão do clássico jogo de Bingo. Na versão tradicional, o jogo é presidido por um não-jogador conhecido como caller. No começo de cada partida, cada jogador recebe uma carta contendo uma única combinação de números de 0 até N dispostos em colunas e linhas. O caller opera um globo contendo N+1 bolas numeradas de 0 até N. Em cada turno, o caller sorteia uma bola do globo, anuncia o número sorteado aos jogadores e não a coloca novamente no globo. Cada jogador procura pelo número em sua carta e o marca caso o encontre. O primeiro jogador que marcar um padrão pré-definido completo em sua carta (uma linha horizontal, por exemplo) ganha um prêmio.

Na versão Albert-Charles-Mary, em cada turno, o caller sorteia uma primeira bola, coloca-a de volta no globo, sorteia uma segunda bola, coloca-a de volta no globo, e então anuncia a diferença absoluta entre os números das duas bolas. Para aumentar o entusiasmo, antes do início da partida, um subconjunto possivelmente vazio de bolas é retirado do globo, de forma que ao menos duas bolas permaneçam no globo. Eles gostariam de saber se cada número de 0 até N podem ainda ser anunciados utilizando a nova regra de sorteio e considerando apenas as bolas que permaneceram dentro do globo.

Linguagem: C

Solução:

#include <stdio.h>
#include <string.h>
int main() {
    int n, b, v, i, j, diferencas[100], valores[100];
    char r;
    while (scanf("%d %d", &n, &b) != EOF) {
        if (!n && !b)
            break;
        memset(valores, 0, sizeof(valores));
        memset(diferencas, 0, sizeof(diferencas));
        for (i = 0; i < b; i++)
            scanf("%d", &valores[i]);        
        diferencas[0] = 1;
        for (i = 0; i < b; i++) {
            for (j = i + 1; j < b; j++) {
                v = valores[i] - valores[j];
                v = (v < 0? -v : v);
                diferencas[v] = 1;
            }
        }
        r = 'Y';
        for (i = 0; i <= n; i++) {
            if (!diferencas[i]) {
                r = 'N';
                break;
            }
        }
        printf("%c\n", r);
    }
    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