Cho biểu thức chính quy p (theo đúng văn phạm ở bài "Động cơ regex bằng dựng NFA Thompson": chữ cái thường, |, *, nối tiếp ngầm định, dấu ngoặc ()). Gọi Σ là tập các chữ cái thường xuất hiện trong p — đây chính là bảng chữ cái hữu hạn của bài toán.
Cho một số nguyên L, hãy đếm số xâu độ dài đúng L trên bảng chữ cái Σ được p khớp toàn bộ, lấy kết quả modulo 109+7.
Gợi ý cách giải chuẩn: dựng NFA Thompson từ p, xác định hoá bằng dựng tập con để được DFA hữu hạn trạng thái, lập ma trận vuông M với Mij là số ký hiệu của Σ khiến DFA chuyển trực tiếp từ trạng thái i sang trạng thái j, rồi dùng luỹ thừa ma trận nhanh (O(soˆˊ trạng thaˊi3logL)) để tính ML; đáp số là tổng các phần tử ở hàng ứng với trạng thái đầu, cột ứng với các trạng thái kết thúc của DFA.
Quy ước: nếu p không chứa chữ cái nào (chỉ có thể khớp xâu rỗng ε), coi Σ=∅; khi đó nếu L=0, đáp số là 1 nếu p khớp xâu rỗng và 0 nếu không; nếu L>0, đáp số luôn là 0.
Dòng 1 chứa biểu thức chính quy p (0≤∣p∣≤60; có thể là dòng rỗng). Dòng 2 chứa số nguyên L (0≤L≤1015).
In ra một số nguyên duy nhất — số xâu độ dài L được p khớp, modulo 109+7.
Ví dụ:
Đầu vào:
(a|b)*
10
Đầu ra:
1024
Đầu vào:
a*b*
6
Đầu ra:
7
Đang tải editor...