Xét văn phạm mô tả một danh sách lồng nhau, với ID là một định danh gồm một hoặc nhiều chữ cái thường (a-z):
S→[L]∣ID L→S(,S)∗
Dữ liệu vào luôn đảm bảo hợp lệ theo văn phạm trên (không có khoảng trắng, không có lỗi cú pháp), vì vậy không cần xử lý lỗi.
Hãy cài đặt một bộ phân tích cú pháp đệ quy gồm hai hàm tương ứng parse_S, parse_L; mỗi khi hàm parse_S được gọi với một tham số depth (độ sâu lồng ngoặc hiện tại bao quanh, ID ở mức ngoài cùng không nằm trong ngoặc nào có depth = 0), hãy:
[...] làm tăng độ sâu của các thành phần bên trong nó thêm 1 so với độ sâu của chính nó.Ví dụ: với chuỗi [a,[b,c],[[d]]]: a ở độ sâu 1; [b,c] làm b, c ở độ sâu 2; [[d]] làm d ở độ sâu 3. Độ sâu lớn nhất là 3, tổng số định danh là 4 (a, b, c, d).
Một dòng duy nhất chứa chuỗi biểu diễn cấu trúc (không có khoảng trắng), ví dụ [a,[b,c],[[d]]] hoặc chỉ một định danh đơn như x.
In ra một dòng gồm hai số nguyên cách nhau bởi một khoảng trắng: độ sâu lồng lớn nhất, rồi đến tổng số định danh (lá), theo đúng thứ tự đó.
Ví dụ:
Đầu vào:
x
Đầu ra:
0 1
Đầu vào:
[a,[b,c],[[d]]]
Đầu ra:
3 4
Đang tải editor...