trang chủ / bài tập / bacmelee

Cuộc chiến vi khuẩn

Đề bài

Mô tả

Một ống nghiệm nằm ngang được chia thành n ô liên tiếp, đánh số từ 1 đến n. Mỗi ô chứa đúng một khuẩn lạc thuộc một loại vi khuẩn nào đó, mỗi loại được ký hiệu bằng một chữ cái Latin thường từ a đến z. Như vậy trạng thái của ống nghiệm tại mỗi thời điểm được mô tả bởi một xâu gồm n chữ cái thường.

Thỉnh thoảng một khuẩn lạc có thể thôn tính một khuẩn lạc ở ô kề bên (bên trái hoặc bên phải, và phải nằm trong phạm vi ống nghiệm). Khi đó khuẩn lạc bị tấn công lập tức bị tiêu diệt và được thay bằng một khuẩn lạc cùng loại với kẻ tấn công, còn kẻ tấn công giữ nguyên loại của mình. Tại mỗi thời điểm chỉ có nhiều nhất một cuộc tấn công xảy ra.

Ví dụ với trạng thái ban đầu là babb, cuộc tấn công tiếp theo có 6 khả năng: ô 1 tấn công ô 2 cho ra bbbb; ô 2 tấn công ô 1 cho ra aabb; ô 2 tấn công ô 3 cho ra baab; ô 3 tấn công ô 2 cho ra bbbb; còn ô 3 tấn công ô 4 hoặc ô 4 tấn công ô 3 đều không làm trạng thái thay đổi.

Cho trạng thái ban đầu của ống nghiệm, hãy đếm số trạng thái khác nhau có thể thu được sau một dãy tấn công bất kỳ. Dãy tấn công có thể rỗng, nên trạng thái ban đầu cũng được tính. Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 109+7.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên n: số ô của ống nghiệm.
  • Dòng thứ hai chứa xâu s gồm n chữ cái Latin thường, mô tả trạng thái ban đầu.

Dữ liệu ra

Một số nguyên duy nhất: số trạng thái khác nhau có thể thu được, lấy phần dư khi chia cho 109+7.

Ràng buộc

  • 1n5000
  • s chỉ gồm các chữ cái Latin thường từ a đến z

Ví dụ

Input Output Giải thích
3
aaa
1 Mọi khuẩn lạc đều cùng loại nên không cuộc tấn công nào làm trạng thái thay đổi.
2
ab
3 Ba trạng thái có thể có là ab (không tấn công), aa (ô 1 thôn tính ô 2) và bb (ô 2 thôn tính ô 1).
4
babb
11 Nhiều hơn một cuộc tấn công có thể xảy ra, chẳng hạn babb → baab → bbbb.
7
abacaba
589

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0