Ghép xâu thành dãy con
Đề bài
Mô tả
Cho một tập gồm xâu ký tự (chỉ gồm các chữ cái Latin thường) và một xâu yêu thích .
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 là dãy con của xâu lớn thu được.
Một xâu là dãy con của xâu nếu có thể thu được bằng cách xóa đi một số (có thể là ) ký tự khỏi 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 bằng cách trên, in ra .
Dữ liệu vào
- Dòng đầu chứa số nguyên — số lượng xâu trong tập.
- 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 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 để là dãy con của xâu ghép, hoặc nếu không thể.
Ràng buộc
- Độ dài mỗi xâu trong tập không vượt quá .
- Độ dài của không vượt quá .
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 . |
Bình luận