trang chủ / đề bài / dhbb23_cbn_10_b

Xâu con chung

Đề bài

Mô tả

Nhật rất hứng thú với các bài toán về xâu. Một hôm anh ta nghĩ ra một bài toán và thách đố Quang có thể giải được. Bài toán được phát biểu như sau:

Cho hai xâu s và p, hãy đếm số cách khác nhau loại bỏ một số ký tự (hoặc không) ở xâu s và xâu p để hai xâu còn lại là giống nhau, không tính xâu rỗng. Các ký tự còn lại của mỗi xâu giữ nguyên thứ tự ban đầu (không nhất thiết liền nhau).

Hai cách được coi là khác nhau nếu tồn tại một vị trí i của xâu s mà ký tự tại đó chỉ bị loại bỏ trong một trong hai cách, hoặc tồn tại một vị trí j của xâu p mà ký tự tại đó chỉ bị loại bỏ trong một trong hai cách.

Dữ liệu vào

  • Dòng đầu tiên chứa xâu s chỉ gồm các ký tự từ 'a' đến 'z'.
  • Dòng thứ hai chứa xâu p chỉ gồm các ký tự từ 'a' đến 'z'.

Dữ liệu ra

Một dòng duy nhất là kết quả của bài toán lấy dư cho 109+7.

Ràng buộc

  • 1≤|s|,|p|≤2000.
  • Hai xâu chỉ gồm các chữ cái Latin thường từ 'a' đến 'z'.

Subtasks

  • Subtask 1 (40% số test): |s|+|p|≤20.
  • Subtask 2 (60% số test): |s|≤2000, |p|≤2000.

Ví dụ

Input Output Giải thích
abc
aaa
3 Chỉ giữ lại ký tự a của s và đúng một trong ba ký tự a của p: có 3 cách.
abc
ac
3 Ba xâu còn lại có thể là "a", "c" hoặc "ac" (xâu "ac" có được từ s khi bỏ ký tự b), mỗi xâu đúng một cách.

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.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0