USACO 2025 - Moo Decomposition

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Bạn có một xâu dài \(S\) gồm các ký tự M và O, cùng một số nguyên \(K\geq 1\). Hãy đếm số cách phân tách \(S\) thành các dãy con sao cho mỗi dãy con có dạng MOOOO....O với đúng \(K\) ký tự O, lấy modulo \(10^9+7\).

Vì xâu rất dài nên bạn không được cung cấp nó một cách tường minh. Thay vào đó, bạn được cho một số nguyên \(L\) (\(1\leq L\leq 10^{18}\)) và một xâu \(T\) độ dài \(N\) (\(1\leq N\leq 10^6\)). Xâu \(S\) là phép nối của \(L\) bản sao của xâu \(T\).

Dữ liệu vào

Dòng đầu tiên chứa \(K\), \(N\)\(L\).

Dòng thứ hai chứa xâu \(T\) độ dài \(N\). Mỗi ký tự là M hoặc O.

Đảm bảo số cách phân tách \(S\) khác không.

Dữ liệu ra

In ra số cách phân tách xâu \(S\), lấy modulo \(10^9+7\).

Ví dụ

Ví dụ 1

Input
2 6 1
MOOMOO
Output
1
Giải thích

Cách duy nhất để phân tách \(S\) thành các MOO là cho ba ký tự đầu tiên tạo thành một MOO và ba ký tự cuối cùng tạo thành một MOO khác.

Ví dụ 2

Input
2 6 1
MMOOOO
Output
6
Giải thích

Có sáu cách khác nhau để phân tách xâu thành các dãy con (chữ hoa tạo thành một MOO, chữ thường tạo thành MOO còn lại):

  • MmOOoo
  • MmOoOo
  • MmOooO
  • MmoOOo
  • MmoOoO
  • MmooOO

Ví dụ 3

Input
1 4 2
MMOO
Output
4

Ví dụ 4

Input
1 4 100
MMOO
Output
976371285
Giải thích

Hãy nhớ lấy đáp án modulo \(10^9+7\).

Phân nhóm

  • Dữ liệu 5–7: \(K=1\), \(L=1\).
  • Dữ liệu 8–10: \(K=2\), \(N\leq 1000\), \(L=1\).
  • Dữ liệu 11–13: \(K=1\).
  • Dữ liệu 14–19: \(L=1\).
  • Dữ liệu 20–25: Không có ràng buộc bổ sung.

Đề bài: Dhruv Rohatgi.

Nguồn

USACO 2025 US Open Contest, Gold — Moo Decomposition: https://usaco.org/index.php?page=viewproblem2&cpid=1521

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: