Hàm tiền tố (Prefix Function)
Xem dưới dạng PDF
Gửi bài giải
Điểm:
10
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
đầu vào:
stdin
Đầu ra:
stdout
Tác giả:
Kiểu bài tập
Trong thuật toán KMP, hàm tiền tố (prefix function) \($\pi[i]$\) được định nghĩa là độ dài lớn nhất của tiền tố thực sự của xâu \($S[0 \ldots i]$\) đồng thời là hậu tố của nó. Hãy viết chương trình tính hàm tiền tố cho xâu \(S\).
Định dạng đầu vào
- Một dòng chứa xâu \(S\) (\(1 \le |S| \le 10^5\)).
Định dạng đầu ra
- In ra \(N\) số nguyên \($\pi[0], \pi[1], \dots, \pi[N-1]$\) trên một dòng.
Ví dụ
Input:
aabaaab
Output:
0 1 0 1 2 2 3
Giải thích: Với S = "aabaaab":
- \(\pi[0] = 0\) (xâu
akhông có tiền tố thực sự) - \(\pi[1] = 1\) (
aacó tiền tố-hậu tốa) - \(\pi[2] = 0\) (
aabkhông có) - \(\pi[3] = 1\) (
aabacóa) - \(\pi[4] = 2\) (
aabaacóaa) - \(\pi[5] = 2\) (
aabaaacóaa) - \(\pi[6] = 3\) (
aabaaabcóaab)
Ràng buộc
- 100% số điểm: \(|S| \le 10^5\).
Nhận xét