SDD tính địa chỉ phần tử mảng nhiều chiều A[i1][i2]…[ik] (chỉ số từ 0) với mảng khai báo kích thước các chiều d1×d2×⋯×dk, mỗi phần tử rộng w byte, địa chỉ gốc B, theo thứ tự lưu trữ (layout) được chỉ định là ROW (row-major — chỉ số cuối biến thiên nhanh nhất, như C) hoặc COL (column-major — chỉ số đầu biến thiên nhanh nhất, như Fortran):
ROW:addr=B+w∑t=1kit∏j=t+1kdj COL:addr=B+w∑t=1kit∏j=1t−1dj
Trước khi tính địa chỉ, phải kiểm tra biên: duyệt t=1,2,…,k, nếu it<0 hoặc it≥dt thì đây là truy cập ngoài biên tại chiều t — báo lỗi ngay tại chiều vi phạm đầu tiên (không tính địa chỉ).
Dòng 1: k (1≤k≤6) — số chiều.
Dòng 2: k số nguyên d1…dk (1≤di≤100).
Dòng 3: ba giá trị w B layout (1≤w≤16, 0≤B≤106, layout ∈{ROW, COL}).
Dòng 4: q (1≤q≤1000) — số truy vấn.
q dòng tiếp theo, mỗi dòng k số nguyên i1…ik (có thể âm).
Với mỗi truy vấn, in một dòng: địa chỉ (số nguyên) nếu hợp lệ, hoặc OUT OF BOUNDS at dimension <t> (chiều vi phạm đầu tiên, đánh số từ 1) nếu truy cập ngoài biên.
Ví dụ:
Đầu vào:
2
3 4
4 100 COL
1
1 2
Đầu ra:
128
Đầu vào:
2
3 4
4 100 ROW
3
1 2
3 0
0 -1
Đầu ra:
124
OUT OF BOUNDS at dimension 1
OUT OF BOUNDS at dimension 2
Đang tải editor...