Một máy ảo quản lý bộ nhớ bằng kỹ thuật đếm tham chiếu (reference counting). Có 10 biến (thanh ghi tham chiếu) V0,V1,…,V9, ban đầu đều là null (không trỏ tới đối tượng nào). Các đối tượng trên vùng nhớ heap được cấp phát tuần tự, đối tượng được tạo đầu tiên có id 1, đối tượng tiếp theo có id 2, v.v. Mỗi đối tượng có một bộ đếm tham chiếu (refcount), khi refcount giảm về 0 thì đối tượng đó bị giải phóng vĩnh viễn (không bao giờ có refcount dương trở lại).
Các lệnh (một lệnh một dòng):
NEW i: cấp phát một đối tượng mới (refcount khởi tạo =1), gán Vi trỏ tới đối tượng đó. Nếu trước đó Vi đang trỏ tới một đối tượng khác, refcount của đối tượng cũ giảm đi 1.COPY i j: gán Vi←Vj (sao chép tham chiếu; nếu Vj là null thì Vi cũng thành null). Nếu giá trị mới không phải null, refcount của đối tượng đó tăng 1. Nếu Vi trước đó đang trỏ tới một đối tượng, refcount đối tượng cũ giảm 1.CLEAR i: gán Vi← null. Nếu Vi trước đó đang trỏ tới một đối tượng, refcount đối tượng đó giảm 1.Sau khi thực thi hết chương trình, hãy liệt kê id các đối tượng còn sống (refcount >0).
Ví dụ:
NEW 0
COPY 1 0
CLEAR 0
NEW 0 tạo đối tượng id 1 (refcount 1) gán vào V0. COPY 1 0 gán V1←V0 (đối tượng 1), refcount đối tượng 1 tăng lên 2. CLEAR 0 xoá V0, refcount đối tượng 1 giảm còn 1. Kết quả: đối tượng còn sống là 1.
Dòng đầu chứa số nguyên n (0≤n≤2000) là số lệnh. n dòng tiếp theo, mỗi dòng là một lệnh theo cú pháp trên, với chỉ số biến i,j luôn thoả 0≤i,j≤9.
In ra một dòng chứa các id đối tượng còn sống, theo thứ tự tăng dần, cách nhau bởi một dấu cách. Nếu không còn đối tượng nào sống, in ra NONE.
Ví dụ:
Đầu vào:
3
NEW 0
COPY 1 0
CLEAR 0
Đầu ra:
1
Đầu vào:
3
NEW 0
NEW 1
CLEAR 0
Đầu ra:
2
Đang tải editor...