[Buổi 24][Hàm tiền tố & KMP][ADV] Bài 1: Viền và tần suất xuất hiện


LÀM BÀI

Points: 100
Time limit: 2.0s
Memory limit: 256M

Author:
Problem types

Viền và tần suất xuất hiện

Bối cảnh và bài toán

Một hệ thống đồng bộ gói tin sử dụng các đoạn đầu đồng thời xuất hiện ở cuối chuỗi làm "mốc khóa". Với mỗi mốc như vậy, nhóm vận hành còn muốn biết đoạn khóa đó xuất hiện bao nhiêu lần trong toàn bộ thông điệp để đánh giá mức độ lặp cấu trúc.

Yêu cầu

Với mọi độ dài l sao cho tiền tố dài l cũng là hậu tố của s (cho phép l = |s|), hãy in l và số lần tiền tố đó xuất hiện trong s như một substring.

Input

Một dòng chứa chuỗi s.

Output

Dòng đầu in số lượng độ dài hợp lệ k. Sau đó in k dòng l c theo l tăng dần, với c là số lần xuất hiện.

Ràng buộc

  • 1 <= |s| <= 2 * 10^5
  • s gồm các chữ cái A..Z.

Chấm điểm

Subtask Điểm Điều kiện Official tests
S1 20% |s| <= 200 01–04
S2 30% |s| <= 5000 05–10
S3 50% Không có ràng buộc bổ sung 11–20

Ví dụ 1

Input

ABACABA

Output

3
1 4
3 2
7 1

Giải thích. Các border có độ dài 1, 3 và toàn chuỗi 7; số lần xuất hiện tương ứng là 4, 2 và 1.

Ví dụ 2

Input

AAA

Output

3
1 3
2 2
3 1

Giải thích. Chuỗi lặp mạnh nên mỗi prefix cũng là suffix và xuất hiện nhiều lần chồng lấn.

Thông tin bài tập

Thuộc tính Giá trị
Mã bài DSA-M08-B24-ADV01
Buổi B24
Loại bài ADVANCED
Mức độ khó Khó (Hard)
Thời gian làm bài khuyến nghị 70 phút
Time limit 2 giây
Memory limit 256 MB
Tổng điểm 100
Chuẩn ngôn ngữ tham chiếu C++11 trở lên

Nguồn: Phỏng theo / Adapted from: Codeforces Round 246 (Div. 2) – 432D – Prefixes and Suffixes.


Comments

There are no comments at the moment.

Zalo