Plataforma: URI
Problema: 1136
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