Hướng dẫn giải của MATRIX03: Tổng các số trên đường bao


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Tổng các số trên đường bao là tổng các ô ở hàng đầu, hàng cuối, cột đầu và cột cuối; các ô góc được tính đúng một lần. Bài yêu cầu đọc toàn bộ bảng (n, m ≤ 10^3) nên độ phức tạp O(n·m) là tối ưu, không có cách vét cạn nào khác đáng kể; viết 1 sub (đạt 20/20 test).

Sub 1: Đọc bảng và cộng các ô trên đường bao — ~O(n·m)~

Khi đọc từng ô (i, j), cộng vào tổng nếu i = 0, i = n − 1, j = 0 hoặc j = m − 1. Đạt 20/20 test.

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    if (fopen("MATRIX03.INP", "r")) {
        freopen("MATRIX03.INP", "r", stdin);
        freopen("MATRIX03.OUT", "w", stdout);
    }
    int n, m;
    cin >> n >> m;
    long long sum = 0;
    // Đọc cả bảng, cộng các ô nằm ở hàng đầu, hàng cuối, cột đầu hoặc cột cuối.
    // Các ô góc được tính đúng một lần nhờ điều kiện "hoặc" trong if.
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            long long a;
            cin >> a;
            if (i == 0 || i == n - 1 || j == 0 || j == m - 1) sum += a;
        }
    }
    cout << sum << "\n";
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.