Hướng dẫn giải của XUẤT HÀNG X VÀ CỘT Y (XHC.CPP)


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.

1. Đề bài tóm tắt

Cho một bảng số kích thước m hàng và n cột (1 <= m, n <= 1000) cùng hai số nguyên dương x và y (1 <= x <= m; 1 <= y <= n). Hãy in ra toàn bộ các số thuộc hàng x và toàn bộ các số thuộc cột y của bảng số này.

  • Đầu vào (INPUT):

    • Dòng 1: Hai số nguyên dương m, n.

    • m dòng tiếp theo: Mỗi dòng chứa n số nguyên mô tả bảng số.

    • Dòng cuối cùng: Hai số nguyên x, y.

  • Đầu ra (OUTPUT):

    • Dòng 1: In ra n phần tử thuộc hàng x theo thứ tự từ trái sang phải.

    • Dòng 2: In ra m phần tử thuộc cột y theo thứ tự từ trên xuống dưới.

2. Phân tích bài toán

  • Khai báo mảng 2 chiều tĩnh a[1005][1005] với chỉ số bắt đầu từ 1.

  • Nhập kích thước m, n và toàn bộ bảng số m x n.

  • Nhập tọa độ hàng x và cột y cần xuất.

  • Tiến hành in ra kết quả theo 2 bước:

    • Bước 1 (Hàng x): Giữ cố định chỉ số hàng là x, cho biến chỉ số cột j chạy từ 1 đến n để in ra các phần tử a[x][j].

    • Bước 2 (Cột y): Giữ cố định chỉ số cột là y, cho biến chỉ số hàng i chạy từ 1 đến m để in ra các phần tử a[i][y].

3. Độ phức tạp

  • Thời gian (Time Complexity): O(m + n) — Duyệt qua n phần tử trên hàng x và m phần tử trên cột y.

  • Không gian (Space Complexity): O(m x n) — Sử dụng mảng 2 chiều tĩnh kích thước tối đa 1005 x 1005.

4. Mã nguồn C++ minh họa

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

// Khai bao mang 2 chieu tinh voi chi so bat dau tu 1
int a[1005][1005];

int main() {
    // Toi uu toc do nhap xuat
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int m, n;
    cin >> m >> n;

    // Nhap mang 2 chieu
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }

    int x, y;
    cin >> x >> y;

    // Dong 1: In hang x tu trai sang phai (tu cot 1 den cot n)
    for (int j = 1; j <= n; j++) {
        cout << a[x][j] << " ";
    }
    cout << endl;

    // Dong 2: In cot y tu tren xuong duoi (tu hang 1 den hang m)
    for (int i = 1; i <= m; i++) {
        cout << a[i][y] << " ";
    }
    cout << endl;

    return 0;
}

5. Ví dụ mô phỏng

Input:
3 5
1 6 2 4 1
6 3 -9 7 2
-6 5 0 1 4
3 2

Quá trình xử lý với x = 3, y = 2:
  • In hàng 3 (từ trái sang phải): a[3][1], a[3][2], a[3][3], a[3][4], a[3][5] => -6 5 0 1 4

  • In cột 2 (từ trên xuống dưới): a[1][2], a[2][2], a[3][2] => 6 3 5

Output:
-6 5 0 1 4
6 3 5


Đang tải...