canuc80k6203·4/50

Đếm Vị Trí Của Mẫu

Nộp bài trên LQDOJ

Bài 62 · Suffix Structures

Cho văn bản và nhiều mẫu. Với mỗi mẫu , hãy đếm số vị trí bắt đầu sao cho đoạn liên tiếp của từ vị trí đó bằng . Hai lần xuất hiện chồng lấn vẫn được tính là hai vị trí khác nhau.

Input

  • Dòng đầu chứa văn bản .
  • Dòng thứ hai chứa số nguyên .
  • dòng tiếp theo, mỗi dòng chứa một mẫu .

Output

  • Với mỗi mẫu theo thứ tự nhập, in số lần xuất hiện của mẫu trên một dòng riêng.

Constraints

  • .
  • .
  • Tổng độ dài của mẫu không vượt quá .
  • và mọi mẫu chỉ gồm các chữ cái thường tiếng Anh từ đến .

Scoring

  • Subtask ( số điểm): và tổng độ dài các mẫu không vượt quá .

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

Example

Test 1

Input

aaaaa
4
a
aa
aaa
b

Output

5
4
3
0

Giải thích: Mẫu aa bắt đầu tại bốn vị trí và mẫu aaa bắt đầu tại ba vị trí; các lần xuất hiện này có chồng lấn nhưng vẫn được tính. Ký tự b không xuất hiện nên cho kết quả .

Lời giải tóm tắt
  • Ý tưởng: Dựng mảng hậu tố của văn bản và tìm bằng hai tìm kiếm nhị phân đoạn [L,R) gồm các hậu tố có mẫu làm tiền tố. Mỗi vị trí bắt đầu của một lần xuất hiện tạo đúng một hậu tố trong đoạn, vì vậy đáp án là R-L; các lần xuất hiện chồng lấn vẫn có vị trí bắt đầu khác nhau và đều được tính.
  • Ý tưởng: Song ánh giữa vị trí xuất hiện và hậu tố trong đoạn chứng minh đoạn không thiếu cũng không thừa phần tử. Do đó kích thước R-L chính là số vị trí cần in.
  • Ý tưởng: Độ phức tạp là O(n log n + Σ |P_i| log n) thời gian và O(n) bộ nhớ.