Mở rộng bài toán dựng Thompson: ngoài ., |, * như quy tắc chuẩn (kí tự →(2,1) trạng thái/dịch chuyển; nối tiếp →(s1+s2−1, t1+t2); hội →(s1+s2+2, t1+t2+4); lặp ∗→(s+2, t+4)), biểu thức còn có thể dùng toán tử lặp giới hạn hậu tố E{m}, E{m,}, E{m,n} áp dụng cho nhân tử E ngay trước nó (một kí tự đơn hoặc một biểu thức trong ngoặc), với ngữ nghĩa mở rộng (unroll) chuẩn:
Văn phạm đầy đủ: kí tự a-z là kí tự đơn; . là nối tiếp (bắt buộc viết tường minh giữa hai nhân tử liên tiếp); | là hội; ( ) để nhóm; hậu tố của một nhân tử là * hoặc {m} / {m,} / {m,n} (m,n là số tự nhiên; có thể có nhiều hậu tố lặp liên tiếp áp lên cùng một nhân tử, ví dụ a{2}*).
Hãy tính tổng số trạng thái và tổng số dịch chuyển của NFA sau khi đã mở rộng hết các lặp giới hạn rồi dựng Thompson theo đúng quy tắc trên.
Một dòng duy nhất chứa biểu thức chính quy (không khoảng trắng, độ dài ≤150, các số m,n trong {} không vượt quá 20, hợp lệ theo văn phạm trên).
Một dòng hai số nguyên: tổng số trạng thái và tổng số dịch chuyển.
Ví dụ: với đầu vào a.b.c (không có lặp giới hạn), kết quả là 4 3; với a{3}, kết quả cũng là 4 3 (tương đương a.a.a).
Ví dụ:
Đầu vào:
a.b{2,3}|(c|d){1,2}.e*Đầu ra:
27 33
Đầu vào:
(a.b){0,3}Đầu ra:
16 18
Đang tải editor...