Trong nhiều ngôn ngữ (Python, Swift, Objective-C...), bộ thu gom rác dùng kỹ thuật đếm tham chiếu (reference counting): mỗi object có một bộ đếm rc = số tham chiếu đang trỏ tới nó. Khi rc giảm về 0, object được giải phóng (free) ngay lập tức.
Có n object đánh số từ 1 đến n (ban đầu rci=0 với mọi i, chưa object nào được tham chiếu). Có các biến (đặt tên bởi chuỗi chữ/số, phân biệt hoa-thường), ban đầu không trỏ tới object nào. Mô phỏng m thao tác lần lượt:
SET v o: cho biến v trỏ tới object o.
CLEAR v: hủy tham chiếu của biến v (đề bài đảm bảo v đang trỏ tới một object). Giảm rc của object đó đi 1 (giải phóng ngay nếu về 0).Yêu cầu: in ra dãy id các object bị giải phóng theo đúng thứ tự thời gian chúng bị giải phóng (mỗi object chỉ giải phóng đúng một lần), và số lượng object còn "sống" (rc>0) sau khi thực hiện xong tất cả thao tác.
Ví dụ: n=3,m=3: SET a 1, SET b 2, SET a 3 → object 1 bị giải phóng ngay khi a chuyển sang trỏ tới 3 (vì rc1 về 0). Kết quả: dãy giải phóng là 1; số object còn sống là 2.
Dòng 1: hai số nguyên n m (0≤n≤200, 0≤m≤500).
m dòng tiếp theo, mỗi dòng là một thao tác đúng cú pháp SET v o hoặc CLEAR v (v là chuỗi không chứa khoảng trắng, độ dài ≤10; 1≤o≤n). Dữ liệu đảm bảo hợp lệ: CLEAR v chỉ được gọi khi v đang trỏ tới một object.
Dòng 1: các id object bị giải phóng theo thứ tự giải phóng, cách nhau 1 dấu cách; in NONE nếu không có object nào bị giải phóng.
Dòng 2: số lượng object còn sống (rc>0) khi kết thúc.
Ví dụ:
Đầu vào:
3 3
SET a 1
SET b 2
SET a 3
Đầu ra:
1
2
Đầu vào:
1 0
Đầu ra:
NONE
0
Đang tải editor...