Hướng dẫn giải của PHẦN TỬ BẢNG HAI CHIỀU (PTB.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ố (mảng hai chiều) gồm m hàng và n cột (1 <= m, n <= 1000). Các hàng được đánh số từ 1 đến m, các cột được đánh số từ 1 đến n. Cho trước tọa độ hàng x và cột y, hãy in ra giá trị của ô nằm ở vị trí (x, y) trong bảng.
Đầ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 (1 <= x <= m; 1 <= y <= n).
Đầu ra (OUTPUT):
- In ra giá trị của phần tử nằm ở hàng x, cột y.
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 số hàng m và số cột n của bảng.
Sử dụng 2 vòng lặp lồng nhau với chỉ số i chạy từ 1 đến m và j chạy từ 1 đến n để nhập từng phần tử a[i][j] vào bảng.
Nhập tọa độ x và y.
In ra trực tiếp giá trị a[x][j] (tại vị trí hàng x, cột y).
3. Độ phức tạp
Thời gian (Time Complexity): O(m x n) để nhập toàn bộ bảng số, truy xuất phần tử O(1).
Không gian (Space Complexity): O(m x n) do 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 (chi so chay tu 1)
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
int x, y;
cin >> x >> y;
// In ra gia tri phan tu tai hang x, cot y
cout << a[x][y];
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ý:
- Bảng số có 3 hàng và 5 cột.
- Tọa độ cần truy xuất: hàng x = 3, cột y = 2.
- Phần tử nằm ở hàng 3, cột 2 là: a[3][2] = 5.
Output:
5