Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng tiếp cận
Kết hợp Z-function với mảng hiệu (difference array) để cộng dồn đóng góp của mọi khớp tiền tố lên từng tiền tố trong .
Nhận xét quan trọng
Với chỉ số 1-based, đặt là độ dài lớn nhất sao cho .
Tiền tố có biên độ dài () khi và chỉ khi . Đặt , điều kiện trở thành .
Đảo chiều: với mỗi thỏa , vị trí đóng góp đúng biên cho mỗi tiền tố với .
Loạt phép cộng theo đoạn này giải bằng mảng hiệu , sau đó lấy tổng tiền tố.
Thuật toán
- Tính theo thuật toán Z-function tiêu chuẩn (cửa sổ , ).
- Mảng hiệu .
- Với mỗi từ tới : nếu thì , .
- với .
- In .
Độ phức tạp
- Thời gian: .
- Bộ nhớ: .
Bình luận