Hướng dẫn giải của Nổi Bật Trong Đàn
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.
Lời giải: Nổi Bật Trong Đàn
Nhận xét quan trọng
Bài toán yêu cầu với mỗi chuỗi , tính tổng độ dài của tất cả xâu con phân biệt của mà không xuất hiện trong bất kỳ nào khác ().
Số lượng xâu con có thể rất lớn, nên ta cần cấu trúc dữ liệu mạnh để xử lý hiệu quả.
Hướng tiếp cận: Suffix Array
Ý tưởng cốt lõi là nối tất cả chuỗi lại với nhau bằng các ký tự phân cách (ví dụ ?, |, ...) để tạo thành một chuỗi tổng hợp . Sau đó xây dựng suffix array (mảng hậu tố) và mảng LCP (Longest Common Prefix) cho .
Tại sao Suffix Array?
Suffix array sắp xếp tất cả hậu tố của theo thứ tự từ điển. Mọi xâu con của đều là tiền tố của một hậu tố bắt đầu trong . Vì vậy, ta có thể xác định xâu con nào của cũng xuất hiện trong bằng cách kiểm tra hàng xóm trong suffix array.
Thuật toán
Với mỗi hậu tố thuộc chuỗi , gọi là độ dài hậu tố này (tính từ vị trí bắt đầu đến hết ). Các tiền tố của hậu tố này có độ dài từ 1 đến , và tương ứng là các xâu con của .
Một tiền tố có độ dài không độc đáo khi nó xuất hiện trong một chuỗi khác, tức là khi nó là tiền tố chung với một hậu tố thuộc (). Độ dài phần không độc đáo tối đa là:
Vậy hậu tố đóng góp vào kết quả:
Ngoài ra, cần tránh đếm trùng xâu con xuất hiện nhiều lần trong : nếu nhiều hậu tố liên tiếp thuộc cùng chuỗi trong suffix array, phần LCP giữa chúng được trừ đi để không tính hai lần.
Chi tiết xử lý nhóm
Các hậu tố liên tiếp trong suffix array thuộc cùng chuỗi tạo thành một "khối". Khi xử lý khối (tất cả từ chuỗi ):
- = LCP với hậu tố ngay trước khối (từ chuỗi khác)
- Duyệt từ trái sang phải qua khối, cập nhật LCP tích lũy
- Đóng góp của hậu tố trong khối:
- Cập nhật để đảm bảo không đếm trùng
Độ phức tạp
- Xây dựng suffix array: với
- Duyệt suffix array:
- Tổng:
Ghi chú cài đặt
- Ký tự phân cách phải nhỏ hơn
atrong thứ tự ASCII để không ảnh hưởng đến sắp xếp (dùng?hoặc ký tự có mã ASCII thấp). - Mảng lưu cặp (chỉ số chuỗi, độ dài còn lại trong chuỗi đó) cho mỗi vị trí trong .
Bình luận