ZeroJudge E513: Symmetric Matrix

題目敘述

每筆測資第一行有一個正整數T,接下來會有T筆資料。每筆資料第一行有一個字串 (N = ?) 代表下面二維陣列的長寬,接下來會有N行代表二維陣列中的資料。要求輸出這個二維陣列是否為對稱矩陣。

對稱矩陣的定義為:

1. 所有元素都大於0

2. 相對於該矩陣的中心對稱


範例輸入 #1

2

N = 3

5 1 3

2 0 2

3 1 5

N = 3

5 1 3

2 0 2

0 1 5


範例輸出 #1

Test #1: Symmetric.

Test #2: Non-symmetric.


解題思路

本題需使用Long Long Int來存矩陣中的資料,收資料的時候如果有收到小於0的數字,可以預設一個布林值,之後就不用進行判斷。可以將矩陣中的資料收成一維陣列,然後判斷這個一維陣列是否是迴文,這樣就可以判斷這個矩陣是否是對稱的。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    for (int i = 0; i<N; i++)
    {
        char a, b;
        int M;
        cin >> a >> b >> M;
        vector<long long int>num;
        bool negative = false;
        for (int j = 0; j<M; j++)
        {
            for (int k = 0; k<M; k++)
            {
                long long int tmp;
                cin >> tmp;
                num.push_back(tmp);
                if (tmp < 0) negative = true;
            }
        }
        if (!negative)
        {
            vector<long long int>tmp = num;
            reverse(tmp.begin(), tmp.end());
            if (tmp == num) cout << "Test #" << i+1 << ": Symmetric.\n";
            else cout << "Test #" << i+1 << ": Non-symmetric.\n";
        }
        else cout << "Test #" << i+1 << ": Non-symmetric.\n";
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天