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] Thông dịch máy đếm (counter machine)

    Một "máy đếm" (counter machine) gồm mmm thanh ghi không âm r0,r1,…,rm−1r_0, r_1, \ldots, r_{m-1}r0​,r1​,…,rm−1​, tất cả khởi tạo bằng 000. Chương trình điều khiển máy gồm nnn lệnh, đánh số dòng từ 000 đến n−1n-1n−1, mỗi lệnh thuộc một trong 4 loại:

    • INC i: tăng rir_iri​ thêm 1, rồi chuyển sang lệnh kế tiếp (dòng hiện tại +1+1+1).
    • DECJZ i L: nếu ri=0r_i = 0ri​=0 thì nhảy tới dòng LLL (không thay đổi rir_iri​); ngược lại giảm rir_iri​ đi 1 rồi chuyển sang lệnh kế tiếp.
    • JMP L: nhảy vô điều kiện tới dòng LLL.
    • HALT: dừng chương trình ngay lập tức.

    Máy bắt đầu thực thi từ dòng 000. Đề bài đảm bảo chương trình luôn dừng (gặp HALT) sau không quá 2×1062 \times 10^62×106 bước thực thi, và mọi đích nhảy LLL đều là chỉ số dòng hợp lệ (từ 000 đến n−1n-1n−1).

    Hãy mô phỏng (thông dịch) chương trình và cho biết giá trị các thanh ghi khi máy dừng.

    Ví dụ: Với m=2m=2m=2 và chương trình INC 1, INC 1, INC 1, DECJZ 1 6, INC 0, JMP 3, HALT (7 dòng, đánh số 0..6), máy sẽ chuyển toàn bộ giá trị từ r1r_1r1​ (ban đầu được nạp bằng 3) sang r0r_0r0​ theo từng đơn vị, kết quả cuối cùng r0=3,r1=0r_0=3, r_1=0r0​=3,r1​=0, in ra 3 0.

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

      Dòng đầu tiên gồm hai số nguyên mmm và nnn (0≤m≤500 \le m \le 500≤m≤50, 1≤n≤10001 \le n \le 10001≤n≤1000) — số thanh ghi và số lệnh.

      nnn dòng tiếp theo là các lệnh của chương trình, theo đúng thứ tự dòng 0,1,…,n−10, 1, \ldots, n-10,1,…,n−1, mỗi dòng có dạng INC i, DECJZ i L, JMP L hoặc HALT (0≤i<m0 \le i < m0≤i<m, 0≤L≤n−10 \le L \le n-10≤L≤n−1).

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

      In ra một dòng duy nhất gồm mmm số nguyên là giá trị cuối cùng của r0,r1,…,rm−1r_0, r_1, \ldots, r_{m-1}r0​,r1​,…,rm−1​ theo đúng thứ tự, cách nhau bởi đúng một dấu cách. Nếu m=0m=0m=0, in ra một dòng trống.

    Ví dụ:

    Đầu vào:

    1 1
    HALT
    

    Đầu ra:

    0
    

    Đầu vào:

    2 7
    INC 1
    INC 1
    INC 1
    DECJZ 1 6
    INC 0
    JMP 3
    HALT
    

    Đầu ra:

    3 0
    

    Đang tải editor...