Cho một chương trình mã ba địa chỉ tuyến tính gồm m câu lệnh, được đánh số ngầm 1,2,…,m theo thứ tự xuất hiện. Lệnh thứ i luôn có dạng:
tI = A OP B
hoặc
tI = A
trong đó tI chính là biến tạm được định nghĩa tại lệnh i (chỉ số I trong tên biến trùng với thứ tự lệnh i, mỗi ti chỉ được định nghĩa đúng một lần), OP∈{+,−,∗,/}, và mỗi toán hạng A, B hoặc là một hằng số nguyên, hoặc là một biến tạm tj với j<i đã được định nghĩa trước đó.
Sau m câu lệnh, có thêm một dòng print tK cho biết giá trị cuối cùng cần quan tâm là tK.
Một câu lệnh được gọi là sống (live) nếu nó cần thiết để tính ra giá trị tK, xác định bằng phân tích lùi: lệnh định nghĩa tK là sống; nếu lệnh định nghĩa ti là sống và ti sử dụng toán hạng tj thì lệnh định nghĩa tj cũng là sống. Các lệnh còn lại là mã chết (dead code), có thể loại bỏ khỏi chương trình mà không ảnh hưởng tới giá trị in ra.
Hãy đếm số lượng câu lệnh là mã chết trong tổng số m câu lệnh.
Dòng 1: số nguyên m.
m dòng tiếp theo: câu lệnh thứ i theo đúng cú pháp tI = A OP B hoặc tI = A như mô tả ở trên (token cách nhau đúng 1 khoảng trắng, tI viết đúng là t nối với số thứ tự i).
Dòng cuối cùng: print tK (K là chỉ số của biến tạm cần quan tâm, 1≤K≤m).
In ra duy nhất một số nguyên - số lượng câu lệnh là mã chết (dead code).
Ví dụ input:
4
t1 = 5
t2 = 3
t3 = t1 + t2
t4 = t1 * 2
print t3
Output: 1 (lệnh định nghĩa t4 không cần thiết để tính t3, nên là mã chết).
Ví dụ:
Đầu vào:
4
t1 = 5
t2 = 3
t3 = t1 + t2
t4 = t1 * 2
print t3
Đầu ra:
1
Đầu vào:
1
t1 = 7
print t1
Đầu ra:
0
Đang tải editor...