canuc80k4801·2/50

Các Vị Trí Khớp

Nộp bài trên LQDOJ

Bài 4.9 · Z Function

Cho văn bản và mẫu . Một vị trí hợp lệ nếu đoạn của bắt đầu tại và có độ dài bằng đúng . Các vị trí được đánh số từ ; những lần xuất hiện chồng lấn vẫn được tính.

Input

  • Dòng đầu chứa .
  • Dòng thứ hai chứa .

Output

  • In mọi vị trí hợp lệ theo thứ tự tăng dần, cách nhau bởi dấu cách. Nếu không có vị trí nào, in .

Constraints

  • .
  • Hai xâu chỉ gồm chữ cái thường .

Scoring

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

Example

Test 1

Input

bananana
ana

Output

2 4 6

Giải thích: Mẫu ana bắt đầu tại các vị trí và ; ba lần xuất hiện có thể chồng lấn nên đều được giữ lại.

Lời giải tóm tắt
  • Ý tưởng: Tính Z cho B + ký_tự_phân_cách + A; một vị trí khớp khi giá trị Z tương ứng đạt ít nhất |B|.
  • Chứng minh đúng: Tiền tố độ dài |B| của xâu ghép chính là mẫu. Giá trị Z ở phần văn bản là LCP giữa mẫu và hậu tố tương ứng của A, nên đạt |B| đúng khi mẫu xuất hiện. Duyệt mọi vị trí theo thứ tự tăng bảo đảm đủ và đúng thứ tự.
  • Độ phức tạp: O(|A|+|B|) thời gian và bộ nhớ.
  • Mẫu công khai: Đối chiếu trực tiếp từng đoạn dài ba trong bananana thu được các vị trí 2, 4 và 6.