Sắp xếp xâu bằng phép đảo
Đề bài
Mô tả
Cho xâu chỉ gồm các chữ cái latin in thường. Với mỗi xâu , đảo ngược nó (chữ cái đầu thành cuối, thứ hai thành thứ áp cuối, ...) tốn đơn vị năng lượng.
Bạn không được phép đổi chỗ hai xâu bất kỳ — thao tác duy nhất là đảo ngược một xâu. Hãy tìm tổng năng lượng nhỏ nhất cần dùng để dãy xâu (theo thứ tự đã cho) được sắp xếp theo thứ tự từ điển không giảm, hoặc thông báo điều đó là không thể.
Xâu nhỏ hơn xâu theo thứ tự từ điển nếu là tiền tố thực sự của ( và trùng với ký tự đầu của ), hoặc tại vị trí đầu tiên mà chúng khác nhau, ký tự của nhỏ hơn ký tự của . Hai xâu bằng nhau đứng cạnh nhau không vi phạm điều kiện sắp xếp.
Dữ liệu vào
- Dòng đầu: số nguyên — số lượng xâu.
- Dòng thứ hai: số nguyên — chi phí đảo ngược của từng xâu.
- dòng tiếp theo: dòng thứ chứa xâu thứ , gồm các chữ cái latin in thường.
Dữ liệu ra
In ra tổng năng lượng nhỏ nhất cần dùng, hoặc nếu không thể.
Ràng buộc
- Tổng độ dài các xâu không vượt quá .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 1 2 ba ac |
1 | Đảo xâu thứ nhất "ba" → "ab", được dãy "ab", "ac" đã sắp xếp. Chi phí 1. |
| 3 1 3 1 aa ba ac |
1 | Đảo xâu thứ ba "ac" → "ca", được "aa", "ba", "ca". Chi phí 1. |
| 2 5 5 bbb aaa |
-1 | Cả hai xâu đối xứng — đảo không làm thay đổi, dãy vẫn không sắp xếp được. |
| 2 3 3 aaa aa |
-1 | "aaa" > "aa" theo thứ tự từ điển; đảo cũng không giúp được. |
Bình luận