canuc80k6216·17/50

Tần Suất Lớn Nhất Theo Độ Dài

Nộp bài trên LQDOJ

Bài 62 · Suffix Structures

Cho một xâu chữ thường độ dài . Với mỗi độ dài từ đến , xét tất cả các xâu con liên tiếp của có đúng ký tự. Hãy tìm số lần xuất hiện lớn nhất của một xâu con như vậy.

Hai lần xuất hiện được tính riêng theo vị trí bắt đầu và được phép chồng lấn.

Input

  • Một dòng chứa xâu .

Output

  • In dòng. Dòng thứ chứa số lần xuất hiện lớn nhất của một xâu con độ dài .

Constraints

  • .
  • chỉ gồm các chữ cái thường .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

ababa

Output

3
2
2
1
1

Giải thích: Với độ dài , ký tự a xuất hiện lần. Với độ dài và , các xâu ab và aba lần lượt xuất hiện lần; mọi xâu con dài hoặc chỉ xuất hiện một lần.

Lời giải tóm tắt
  • Ý tưởng: Dựng suffix automaton của S. Mỗi lần thêm một ký tự, trạng thái cuối mới nhận occ = 1; clone nhận occ = 0. Sau khi dựng xong, xử lý trạng thái theo độ dài giảm dần và cộng occ[v] vào suffix link của v. Khi đó occ[v] là số vị trí kết thúc của mọi xâu thuộc trạng thái v.
  • Ý tưởng: Ghi occ[v] vào đáp án ở độ dài lớn nhất len[v]. Một trạng thái còn đại diện các độ dài ngắn hơn, vì vậy quét L giảm dần và thay ans[L] bằng max(ans[L], ans[L+1]). Đây chính là bước lấp toàn bộ khoảng độ dài.
  • Ý tưởng: Độ phức tạp O(n·alphabet) thời gian và O(n·alphabet) bộ nhớ với bảng 26 ký tự.