[Buổi 11][Quay lui & Cắt tỉa][WS] Bài 1: Sinh mọi mã ký tự khác nhau
Sinh mọi mã ký tự khác nhau
Bối cảnh và bài toán
Một hệ thống thử nghiệm cần liệt kê mọi mã khác nhau có thể tạo bằng cách hoán vị toàn bộ ký tự của một chuỗi. Một số ký tự có thể trùng nhau, vì vậy hai cách đổi chỗ khác nhau nhưng tạo cùng chuỗi chỉ được tính một lần.
Yêu cầu
In số mã khác nhau và liệt kê chúng theo thứ tự từ điển tăng dần.
Input
- Một dòng chứa chuỗi chữ thường
s.
Output
Dòng đầu là số lượng mã. Các dòng sau là từng mã theo thứ tự từ điển.
Ràng buộc
1 <= |s| <= 8s chỉ gồm a..z
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | n ≤ 6 | 01–04 |
| S2 | 30% | n ≤ 7 | 05–10 |
| S3 | 50% | Không có ràng buộc bổ sung | 11–20 |
Ví dụ 1
Input
aab
Output
3
aab
aba
baa
Giải thích. Có đúng ba hoán vị khác nhau vì hai ký tự a giống nhau.
Ví dụ 2
Input
ab
Output
2
ab
ba
Giải thích. Hai ký tự khác nhau tạo hai hoán vị.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M04-B11-WS01 |
| Buổi | B11 |
| Loại bài | WORKSHOP |
| Mức độ khó | Trung bình (Medium) |
| Thời gian làm bài khuyến nghị | 45 phút |
| Time limit | 2 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
| Yêu cầu bổ sung | Decision Note |
Nguồn: Phỏng theo CSES Problem Set — Creating Strings (Task 1622).
Tham khảo: https://cses.fi/problemset/task/1622/
Comments