Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Địa chỉ phần tử mảng nhiều chiều theo SDD row/col-major

    SDD tính địa chỉ phần tử mảng nhiều chiều A[i1][i2]…[ik]A[i_1][i_2]\dots[i_k]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×⋯×dkd_1 \times d_2 \times \cdots \times d_kd1​×d2​×⋯×dk​, mỗi phần tử rộng www byte, địa chỉ gốc BBB, 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\text{ROW}:\quad \text{addr} = B + w\sum_{t=1}^{k} i_t \prod_{j=t+1}^{k} d_jROW:addr=B+w∑t=1k​it​∏j=t+1k​dj​ COL:addr=B+w∑t=1kit∏j=1t−1dj\text{COL}:\quad \text{addr} = B + w\sum_{t=1}^{k} i_t \prod_{j=1}^{t-1} d_jCOL:addr=B+w∑t=1k​it​∏j=1t−1​dj​

    Trước khi tính địa chỉ, phải kiểm tra biên: duyệt t=1,2,…,kt = 1, 2, \dots, kt=1,2,…,k, nếu it<0i_t < 0it​<0 hoặc it≥dti_t \ge d_tit​≥dt​ thì đây là truy cập ngoài biên tại chiều ttt — báo lỗi ngay tại chiều vi phạm đầu tiên (không tính địa chỉ).

    • Định dạng đầu vào:

      Dòng 1: kkk (1≤k≤61 \le k \le 61≤k≤6) — số chiều. Dòng 2: kkk số nguyên d1…dkd_1 \dots d_kd1​…dk​ (1≤di≤1001 \le d_i \le 1001≤di​≤100). Dòng 3: ba giá trị w B layout (1≤w≤161 \le w \le 161≤w≤16, 0≤B≤1060 \le B \le 10^60≤B≤106, layout ∈{\in \{∈{ROW, COL}\}}). Dòng 4: qqq (1≤q≤10001 \le q \le 10001≤q≤1000) — số truy vấn. qqq dòng tiếp theo, mỗi dòng kkk số nguyên i1…iki_1 \dots i_ki1​…ik​ (có thể âm).

    • Định dạng đầu ra:

      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...