Khi sinh mã cho các câu lệnh gán biến, máy ảo ngăn xếp cần thêm một vùng bộ nhớ biến (biểu diễn bằng mảng) bên cạnh ngăn xếp tính toán. Cho một máy ảo với ngăn xếp và một mảng bộ nhớ gồm m ô nhớ đánh số từ 0 đến m−1, tất cả khởi tạo bằng 0.
Chương trình gồm n lệnh, mỗi lệnh thuộc một trong các dạng:
PUSH x: đẩy hằng số nguyên x vào đỉnh ngăn xếp.LOAD i: đẩy giá trị hiện tại của ô nhớ i vào đỉnh ngăn xếp (không thay đổi bộ nhớ).STORE i: lấy (pop) giá trị ở đỉnh ngăn xếp ra và ghi đè vào ô nhớ i.ADD, SUB, MUL: pop hai phần tử b (đỉnh) và a (ngay dưới), đẩy lại a op b.Dữ liệu vào đảm bảo ngăn xếp luôn đủ phần tử khi cần pop, và mọi chỉ số i hợp lệ (0≤i<m). Sau khi thực hiện xong toàn bộ chương trình, hãy in ra trạng thái cuối cùng của toàn bộ mảng bộ nhớ.
Ví dụ: với n=5,m=2 và chương trình PUSH 5, STORE 0, PUSH 3, LOAD 0, ADD: ô nhớ 0 được gán giá trị 5, ô nhớ 1 không bao giờ bị ghi nên vẫn là 0 (dù ngăn xếp cuối cùng còn giá trị 8, giá trị đó không được lưu vào bộ nhớ). Kết quả: 5 0.
Dòng đầu tiên chứa hai số nguyên n và m (0≤n≤2000, 1≤m≤100). n dòng tiếp theo, mỗi dòng là một lệnh theo đúng định dạng nêu trên.
In ra một dòng gồm m số nguyên (giá trị cuối cùng của các ô nhớ 0,1,…,m−1), cách nhau bởi khoảng trắng.
Ví dụ:
Đầu vào:
5 2
PUSH 5
STORE 0
PUSH 3
LOAD 0
ADD
Đầu ra:
5 0
Đầu vào:
2 1
PUSH 9
STORE 0
Đầu ra:
9
Đang tải editor...