#PH015. Tạo các chuỗi (Creating Strings)
Tạo các chuỗi (Creating Strings)
Tạo các chuỗi
Nguồn: CSES Problem Set
Phiên bản: Phước Hưng OJ Extended
Đề bài
Cho một chuỗi gồm ký tự chữ cái thường tiếng Anh.
Hãy tạo ra tất cả các chuỗi phân biệt có thể thu được bằng cách sắp xếp lại toàn bộ các ký tự của .
Mỗi ký tự của chuỗi ban đầu phải được sử dụng đúng số lần nó xuất hiện trong . Nếu một ký tự xuất hiện nhiều lần thì việc hoán đổi vị trí giữa các lần xuất hiện giống nhau không tạo thành một chuỗi mới.
Gọi là số chuỗi phân biệt có thể tạo được.
Các chuỗi kết quả phải được in theo thứ tự từ điển tăng dần.
Input
Dòng duy nhất chứa chuỗi gồm ký tự.
Mỗi ký tự của thuộc khoảng từ a đến z.
Output
Dòng đầu tiên in số nguyên — số chuỗi phân biệt có thể tạo được từ các ký tự của .
Tiếp theo in dòng, mỗi dòng chứa một chuỗi kết quả.
Các chuỗi phải được in theo thứ tự từ điển tăng dần.
Subtask
- Subtask 1 — 10%: .
- Subtask 2 — 20%: .
- Subtask 3 — 30%: ; nếu thì tồn tại một ký tự xuất hiện ít nhất lần.
- Subtask 4 — 40%: ; nếu thì tồn tại một ký tự xuất hiện ít nhất lần; nếu thì tồn tại một ký tự xuất hiện ít nhất lần.
Ví dụ
Input
aabac
Output
20
aaabc
aaacb
aabac
aabca
aacab
aacba
abaac
abaca
abcaa
acaab
acaba
acbaa
baaac
baaca
bacaa
bcaaa
caaab
caaba
cabaa
cbaaa
Giải thích
Chuỗi aabac có ký tự, trong đó ký tự a xuất hiện lần, còn b và c mỗi ký tự xuất hiện một lần.
Nếu phân biệt cả ba ký tự a thì có cách sắp xếp. Tuy nhiên ba ký tự a giống nhau nên mỗi chuỗi thực tế bị tính lặp lần. Vì vậy số chuỗi phân biệt là
Output chứa đúng chuỗi phân biệt và được sắp xếp theo thứ tự từ điển tăng dần, bắt đầu từ aaabc và kết thúc bằng cbaaa.