Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Mô phỏng NFA có epsilon-dịch chuyển

    Một động cơ regex kiểu NFA thực thi bằng cách duy trì một tập trạng thái tích cực (active set) và cập nhật tập này theo từng kí tự đọc vào, xen giữa là bước đóng ε\varepsilonε (epsilon-closure). Cho một NFA với nnn trạng thái đánh số 0,…,n−10,\dots,n-10,…,n−1, trạng thái bắt đầu là 000, một tập trạng thái kết thúc, và các dịch chuyển (có thể có ε\varepsilonε, kí hiệu #, và có thể không đơn định — nhiều dịch chuyển cùng kí tự từ một trạng thái).

    Với mỗi xâu truy vấn, hãy mô phỏng đúng quy trình: bắt đầu từ đóng ε\varepsilonε của {0}\{0\}{0}; với mỗi kí tự ccc của xâu, tính tập kế tiếp bằng dịch chuyển theo ccc từ mọi trạng thái đang tích cực rồi lấy đóng ε\varepsilonε của tập đó. Sau khi đọc hết xâu, in ACCEPT k nếu tập tích cực cuối cùng giao với tập trạng thái kết thúc khác rỗng, ngược lại in REJECT k, trong đó kkk là số phần tử của tập tích cực cuối cùng (có thể bằng 000).

    • Định dạng đầu vào:

      Dòng 1: ba số nguyên n m k — số trạng thái, số dịch chuyển, số truy vấn. Dòng 2: số nguyên fff rồi fff chỉ số trạng thái kết thúc. mmm dòng tiếp theo, mỗi dòng u sym v — dịch chuyển từ uuu đến vvv theo kí hiệu sym (một chữ cái thường, hoặc # cho ε\varepsilonε). kkk dòng tiếp theo, mỗi dòng một xâu truy vấn gồm chữ cái thường (xâu rỗng được biểu diễn bằng kí tự @).

    • Định dạng đầu ra:

      kkk dòng, mỗi dòng ACCEPT k hoặc REJECT k như mô tả ở trên.

      Ví dụ: với NFA 3 trạng thái, kết thúc {2}\{2\}{2}, dịch chuyển 0 a 1 và 1 # 2, xâu a cho kết quả ACCEPT 2 (tập cuối {1,2}\{1,2\}{1,2}).

    Ví dụ:

    Đầu vào:

    1 0 1
    1 0
    @

    Đầu ra:

    ACCEPT 1
    

    Đầu vào:

    3 2 2
    1 2
    0 a 1
    1 # 2
    a
    @

    Đầu ra:

    ACCEPT 2
    REJECT 1
    

    Đang tải editor...