Programação Competitiva

Campo minado [OBI 2011]

Leonardo Viana é um garoto fascinado por jogos de tabuleiro. Nas férias de janeiro, ele aprendeu um jogo chamado “Campo minado”, que é jogado em um tabuleiro com N células dispostas na horizontal. O objetivo desse jogo é determinar, para cada célula do tabuleiro, o número de minas explosivas nos arredores da mesma (que são a própria célula e as células imediatamente vizinhas à direita e à esquerda, caso essas existam). Por exemplo, a figura abaixo ilustra uma possível configuração de um tabuleiro com 5 células:

A primeira célula não possui nenhuma mina explosiva, mas é vizinha de uma célula que possui uma mina explosiva. Nos arredores da segunda célula temos duas minas, e o mesmo acontece para a terceira e quarta células; a quinta célula só tem uma mina explosiva em seus arredores. A próxima figura ilustra a resposta para esse caso.

Leonardo sabe que você participa da OBI e resolveu lhe pedir para escrever um programa de computador que, dado um tabuleiro, imprima o número de minas na vizinhança de cada posição. Assim, ele poderá conferir as centenas de tabuleiros que resolveu durante as férias.

Entrada

A primeira linha da entrada contém um inteiro N (1 ≤ N ≤ 50) indicando o número de células no tabuleiro. O tabuleiro é dado nas próximas N linhas. A i-ésima linha seguinte contém 0 se não existe mina na i-ésima célula do tabuleiro e 1 se existe uma mina na i-ésima célula do tabuleiro.

Saída

A saída é composta por N linhas. A i-ésima linha da saída contém o número de minas explosivas nos arredores da i-ésima célula do tabuleiro.

Exemplo

EntradaSaída
5
0
1
1
0
1
1
2
2
2
1
5
0
1
1
1
0
1
2
3
2
1

Solução em C/C++

#include <stdio.h>

int main(void) {
	int i, N;
	scanf("%i", &N);
	int tabuleiro[N+1];

	//Ler o tabuleiro
	for (i=1; i<=N; i++) {
		scanf("%i", &tabuleiro[i]);
	}
	
	//computa o resultado
	for (i=1; i<=N; i++) {
		if (i == 1) { //se for a primeira posição
			if (N <= i) { //se o tabuleiro tem apenas 1 posição
				printf("%i\n", tabuleiro[i]);
			} else {
				printf("%i\n", tabuleiro[i]+tabuleiro[i+1]);
			}
		} else if (i == N) { //se for a última posição
			printf("%i\n", tabuleiro[i]+tabuleiro[i-1]);
		} else {
			printf("%i\n", tabuleiro[i-1]+tabuleiro[i]+tabuleiro[i+1]);
		}
	}

	return 0;
}

Teste o código: http://ideone.com/eodrXr

Sair da versão mobile