canuc80k2137·38/50

Đếm Xâu Có Mẫu Bắt Buộc

Nộp bài trên LQDOJ

Bài 21 · KMP

Cho số nguyên và mẫu chữ hoa . Hãy đếm số xâu độ dài đúng trên bảng chữ A đến có xuất hiện ít nhất một lần như một đoạn liên tiếp. Mỗi xâu được tính một lần, bất kể có bao nhiêu occurrence.

Input

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

Output

  • In đáp án modulo .

Constraints

  • .
  • ; chỉ gồm .

Scoring

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

Example

Test 1

Input

3
AB

Output

52

Giải thích: Mẫu có thể nằm ở vị trí hoặc . Có xâu dạng ABx và xâu dạng xAB; hai nhóm không giao nhau, nên tổng là .

Lời giải tóm tắt
  • Phân tích: Đếm xâu chữ hoa độ dài N chứa pattern P ít nhất một lần, modulo 10^9+7.
  • Phân tích: Dựng transition KMP cho các trạng thái 0..|P|. Trạng thái |P| là hấp thụ, biểu diễn P đã xuất hiện. DP theo từng vị trí và 26 ký tự; đáp án là số đường đi kết thúc ở trạng thái hấp thụ.
  • Thuật toán: 1. Chuyển input về trạng thái hoặc biểu diễn đối sánh nêu trên. 2. Tính prefix-function và các transition cần thiết. 3. Duyệt dữ liệu hoặc các trạng thái DP, cập nhật đúng quy tắc biên và occurrence chồng lấn. 4. In kết quả theo đúng output contract; với output không duy nhất, checker xác minh tính hợp lệ và tối ưu.
  • Chứng minh: Trước khi match, trạng thái KMP lưu đúng tiền tố dài nhất của P đang là hậu tố; khi đạt |P|, occurrence đã tồn tại và trạng thái hấp thụ giữ sự kiện đó. Mỗi xâu tương ứng duy nhất một đường đi và được cộng một lần, nên các đường kết thúc ở |P| đúng bằng tập cần đếm.
  • Độ phức tạp: O(26N|P|) thời gian và O(|P|) bộ nhớ DP.