Ghép xâu thành dãy con

Đề bài

Mô tả

Cho một tập gồm n xâu ký tự (chỉ gồm các chữ cái Latin thường) và một xâu yêu thích s.

Bạn được phép chọn một số xâu từ tập (mỗi xâu có thể được chọn nhiều lần, hoặc không chọn) rồi viết chúng liên tiếp nhau thành một xâu lớn. Hãy tìm số lượng xâu tối thiểu cần chọn (tính cả số lần lặp) sao cho sdãy con của xâu lớn thu được.

Một xâu p là dãy con của xâu q nếu có thể thu được p bằng cách xóa đi một số (có thể là 0) ký tự khỏi q mà không thay đổi thứ tự các ký tự còn lại. Ví dụ, trong xâu "abcd" thì "ad", "acd", "abcd" là các dãy con, còn "ba", "abdc" thì không.

Nếu không thể tạo ra s bằng cách trên, in ra 1.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — số lượng xâu trong tập.
  • n dòng tiếp theo, mỗi dòng chứa một xâu khác rỗng gồm các chữ cái Latin thường. Các xâu trong tập có thể trùng nhau.
  • Dòng cuối chứa xâu s khác rỗng gồm các chữ cái Latin thường.

Dữ liệu ra

In ra một số nguyên — số lượng xâu tối thiểu cần chọn để s là dãy con của xâu ghép, hoặc 1 nếu không thể.

Ràng buộc

  • 1n50
  • Độ dài mỗi xâu trong tập không vượt quá 50.
  • Độ dài của s không vượt quá 2500.

Ví dụ

Input Output Giải thích
3
a
aa
a
aaa
2 Chọn xâu thứ ba ("a") rồi xâu thứ hai ("aa"), ghép lại được "aaa" chứa "aaa" làm dãy con.
4
ab
aab
aa
bb
baaab
3 Chọn xâu thứ hai, thứ ba, rồi lại thứ hai: "aab"+"aa"+"aab" = "aabaaaab", chứa "baaab" làm dãy con.
2
aaa
bbb
aaacbbb
-1 Không xâu nào chứa ký tự 'c', nên không thể tạo ra s.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0