[Bình Định - 23] Trò chơi xâu ký tự
Bạn có một xâu gồm N ký tự. Đầu tiên, bạn được sắp xếp lại ký tự trong xâu theo một thứ tự bất kỳ. Sau đó, hãy chia xâu ký tự này thành chính xác k xâu ký tự liên tiếp không rỗng sao cho xâu ký tự có thứ tự từ điển lớn nhất là nhỏ nhất có thể.
Xâu A có thứ tự từ điển nhỏ hơn B khi thỏa một trong những điều kiện sau:
- A là tiền tố của B và A khác B.
- Tồn tại vị trí i (1 ≤ i ≤ min(|A|, |B|)) sao cho A[i] < B[i] và A[j] = B[j] với mọi j (1 ≤ j < min(|A|, |B|)). Ở đây, |A| là độ dài của xâu A, min (x, y) là giá trị nhỏ nhất giữa x và y.
Ví dụ: - abc có số thứ tự từ điển nhỏ hơn ad.
- ab có số thứ tự từ điển nhỏ hơn abb.
Dữ liệu: vào từ file STRGAME.INP gồm:
- Dòng thứ nhất chứa hai số N và k (1 ≤ k ≤ N ≤ 100);
- Dòng thứ hai gồm xâu chứa N ký tự. Các ký tự là các chữ cái tiếng Anh in thường.
Kết quả: ghi ra file STRGAME.OUT một dòng duy nhất là xâu ký tự có thứ tự từ điển lớn nhất của phương án tối ưu.</h5>
Giới hạn:
- 20% số test có xâu ký tự gồm toàn chữ cái a.- 20% số test tiếp theo có K = N.
- 60% số test còn lại không có ràng buộc gì thêm.
Ví dụ:
STRGAME.INP 4 2 baba STRGAME.OUT ab
STRGAME.INP 4 2 baca STRGAME.OUT abc
Giải thích:
- Ở ví dụ đầu tiên, có thể sắp xếp baba thành abab và chia thành 2 xâu con ab và ab. Khi đó xâu có thứ tự từ điển lớn nhất là ab. Cũng có thể xếp thành abba và chia thành 2 xâu abb và a, tuy nhiên phương án này cho xâu có thứ tự từ điển lớn nhất là abb, lớn hơn ab ở phương án đầu tiên.
- Ở ví dụ thứ hai, có thể sắp xếp baca thành abca và chia thành 2 xâu con abc và a. Khi đó xâu ký tự có thứ tự từ điển lớn nhất là abc.
Comments