Pesquisar este blog

Livros Recomendados

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 <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;
}

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