Hướng dẫn giải của XUẤT HÀNG X VÀ CỘT Y (XHC.CPP)
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