Nén xâu
Đề bài
Mô tả
Trong quá trình luyện tập cho cuộc thi học sinh giỏi sắp tới, Hùng được thầy giáo giao cho thử sức giải bài toán nén xâu kí tự (chỉ gồm các kí tự la tinh in hoa) sau đây.
Phép cộng trên hai xâu và , kí hiệu là , được hiểu là ghép xâu liền sau xâu . Xuất phát từ hai xâu và số nguyên , xâu được tạo theo luật sau (còn được gọi là luật tựa Fibonacci):
Ví dụ, với hai xâu AB, C và ta có: AB, C, CAB, CABC, CABCCAB.
Giả sử xâu có độ dài là xâu được tạo theo luật trên từ hai xâu xuất phát có độ dài tương ứng là . Như vậy, là xâu gồm kí tự đầu tiên của xâu và là xâu gồm kí tự tiếp theo của xâu . Xâu có thể được nén thành bộ vì từ 3 thông tin và ta có thể khôi phục được xâu theo luật trên. Ví dụ xâu CABCCAB có thể được nén thành bộ AB, C, .
Một xâu bất kì có độ dài cũng có thể được nén theo cách như trên. Với hai số nguyên dương , gọi là xâu gồm kí tự đầu tiên của xâu và là xâu gồm kí tự tiếp theo trên xâu . Khi đó, xâu có thể được nén thành bộ . Tuy nhiên, từ 3 thông tin và ta có thể không khôi phục được chính xác xâu . Do đó, người ta đánh giá độ lỗi của phương pháp nén xâu này như sau. Với bộ , tạo xâu với nhỏ nhất mà độ dài lớn hơn hoặc bằng theo luật tựa Fibonacci từ hai xâu xuất phát , . Độ lỗi của việc nén xâu được tính bằng số lượng vị trí mà khác với , trong đó và tương ứng là kí tự thứ của xâu và xâu với .
Ví dụ, với và , xâu CABACC có độ dài được nén thành bộ AB, C, , sau đó tạo ra xâu CABCCAB. Khi đó độ lỗi của việc nén xâu là do có hai kí tự ở các vị trí thứ 4 và thứ 6 của và là khác nhau.
Nhận thấy rằng kí tự đầu tiên của xâu ảnh hưởng rất lớn đến độ lỗi của việc nén xâu. Vì vậy, người ta tiến hành thay đổi không quá kí tự trong kí tự đầu tiên của xâu để biến xâu thành xâu sao cho độ lỗi của việc nén xâu là nhỏ nhất. Việc thay đổi một kí tự là thay kí tự đó bởi một kí tự khác.
Yêu cầu: Cho các số nguyên và xâu , hãy tìm cách thay đổi không quá kí tự trong kí tự đầu tiên của xâu để biến xâu thành xâu sao cho độ lỗi của việc nén xâu là nhỏ nhất.
Dữ liệu vào
- Dòng thứ nhất chứa bốn số nguyên cách nhau bởi dấu cách ; ;
- Dòng thứ hai chứa xâu độ dài , xâu chỉ gồm các kí tự thuộc tập kí tự chữ cái la tinh in hoa (từ A đến Z).
Dữ liệu ra
In ra một số nguyên là độ lỗi nhỏ nhất tìm được.
Ràng buộc
- ; .
- chỉ gồm các chữ cái la tinh in hoa.
Subtasks
- Subtask 1 ( số test, số điểm): ; ;
- Subtask 2 ( số test, số điểm): ; và xâu chỉ gồm hai kí tự A và B;
- Subtask 3 ( số test, số điểm): .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 6 2 1 1 CABAAC |
1 | Thay kí tự đầu tiên thành A được AABAAC, nén thành bộ AB, A, và tạo ra AABAAAB. Chỉ vị trí thứ 6 khác nhau nên độ lỗi là . |
| 6 2 1 0 CABACC |
2 | Ví dụ trong đề: không được thay đổi kí tự nào, CABCCAB khác ở vị trí thứ 4 và thứ 6. |
Bình luận