Algorithm


Problem Name: 2 AD-HOC - beecrowd | 2407

Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/2407

Quadrado Mágico

 

Por OBI - Olimpíada Brasileira de Informática 2011 BR Brazil

Timelimit: 1

Arnaldo e Bernardo são dois garotos que compartilham um peculiar gosto por curiosidades matemáticas. Nos últimos tempos, sua principal diversão tem sido investigar propriedades matemágicas de tabuleiros quadrados preenchidos com inteiros. Recentemente, durante uma aula de matemática, os dois desafiaram os outros alunos da classe a criar quadrados mágicos, que são quadrados preenchidos com números de 1 a N2, de tal forma que a soma dos N números em uma linha, coluna ou diagonal principal do quadrado tenham sempre o mesmo valor. A ordem de um quadrado mágico é o seu número de linhas, e o valor do quadrado mágico é o resultado da soma de uma linha. Um exemplo de quadrado mágico de ordem 3 e valor 15 é mostrado na figura abaixo:

Para surpresa de Arnaldo e Bernardo, os outros alunos criaram um grande número de quadrados, alguns enormes, e alegaram que todos eram quadrados mágicos. Arnaldo e Bernardo agora precisam de sua ajuda, para verificar se os quadrados criados são realmente mágicos.

Você deve escrever um programa que, dado um quadrado, verifique se ele é realmente mágico.

 

Entrada

 

A primeira linha da entrada contém um único número inteiro (3 ≤ N ≤ 1000.​), indicando a ordem do quadrado (seu número de linhas). As N linhas seguintes descrevem o quadrado. Cada uma dessas linhas contém N números inteiros separados por um espaço em branco (1 ≤ valor de cada célula ≤ 109).

 

Saída

 

Seu programa deve imprimir uma única linha. Caso o quadrado seja mágico, a linha deve conter o valor do quadrado (ou seja, a soma de uma de suas linhas). Caso contrário, a linha deve conter o número 0.

 

 

 

Exemplos de Entrada Exemplos de Saída

3

1 1 1

1 1 1

1 1 1

0

 

Code Examples

#1 Code Example with C++ Programming

Code - C++ Programming


#include <cstdio>
#define MAX_N 1000
int main() {
    int matriz[MAX_N][MAX_N];
    int jaesteve[MAX_N * MAX_N + 1], soma1[MAX_N], soma2[MAX_N];
    int ordem, i, j, todos = 0, diagonal1 = 0, diagonal2 = 0;
    scanf("%d", &ordem);
    for (i = 0; i  <  ordem; i++) {
        for (j = 0; j  <  ordem; j++) {
            int davez;
            scanf("%d", &davez);
            matriz[i][j] = davez;
            soma1[i] = soma1[i] + matriz[i][j];
            soma2[j] = soma2[j] + matriz[i][j];
            if (jaesteve[davez] == 0) {
                jaesteve[davez] = 1;
                todos++;
            }
            if (i == j) diagonal1 += davez;
            if (i + j + 1 == ordem) diagonal2 += davez;
        }
    }
    if (todos != ordem * ordem) {
        printf("0\n");
        return 0;
    }
    int referencia = soma1[0];
    for (i = 0; i  <  ordem; i++) {
        if (soma1[i] != referencia || soma2[i] != referencia) {
            printf("0\n");
            return 0;
        }
    }
    if (diagonal1 != referencia || diagonal2 != referencia) {
        printf("0\n");
        return 0;
    }
    printf("%d\n", referencia);
    return 0;
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
3
1 1 1
1 1 1
1 1 1
Advertisements

Demonstration


Previous
#2406 Beecrowd Online Judge Solution 2406 Expressões Solution in C, C++, Java, Js and Python
Next
#2408 Beecrowd Online Judge Solution 2408 Vice-Campeão Solution in C, C++, Java, Js and Python