Cho một đoạn mã ba địa chỉ (TAC) tuyến tính (không có nhãn, không có lệnh rẽ nhánh), gồm n dòng lệnh, mỗi dòng có một trong hai dạng:
x = a (gán trực tiếp)x = a op b (phép hai ngôi, op ∈{+,−,∗,/})trong đó x luôn là tên biến, còn a, b là hằng số nguyên (có thể âm, ví dụ -7) hoặc tên biến. Nếu một biến được dùng trước khi từng được gán, giá trị của nó được coi là 0.
Phép chia / là phép chia nguyên làm tròn về 0 (truncation toward zero), ví dụ −7/2=−3 và −1/3=0. Đề bảo đảm không có phép chia cho 0.
Hãy thực thi tuần tự n dòng lệnh theo đúng thứ tự xuất hiện, sau đó với mỗi biến được truy vấn, in ra giá trị cuối cùng của nó.
Ví dụ: với đoạn mã a=-7; b=2; c=a/b; d=a*b; e=d+c và truy vấn c d e, kết quả là c=-3, d=-14, e=-17.
Dòng 1: số nguyên n — số lệnh TAC. n dòng tiếp theo: các lệnh TAC theo đúng 2 dạng mô tả ở trên (các token cách nhau đúng 1 khoảng trắng). Dòng tiếp theo: số nguyên k — số biến cần truy vấn. Nếu k>0: một dòng chứa k tên biến cách nhau bởi khoảng trắng, theo đúng thứ tự cần in ra kết quả (có thể trùng lặp). Nếu k=0, dòng này có thể để trống hoặc không xuất hiện.
In k dòng, mỗi dòng có dạng <ten_bien> = <gia_tri>, theo đúng thứ tự các biến được truy vấn (nếu k=0 thì không in dòng nào).
Ví dụ:
Đầu vào:
1
x = 5
1
x
Đầu ra:
x = 5
Đầu vào:
5
a = -7
b = 2
c = a / b
d = a * b
e = d + c
3
c d e
Đầu ra:
c = -3
d = -14
e = -17
Đang tải editor...