Chia gỗ theo tỉ lệ D:K
Đề bài
Mô tả
Cho một tấm gỗ được biểu diễn bằng một xâu gồm ký tự, mỗi ký tự là 'D' hoặc 'K'.
Ta muốn thực hiện một số nhát cắt (có thể là ) để chia xâu thành một số đoạn liên tiếp, mỗi đoạn có độ dài ít nhất là . Ta muốn chia sao cho tỉ lệ giữa số lần xuất hiện của 'D' và số lần xuất hiện của 'K' trong mọi đoạn đều bằng nhau. Hãy tìm số đoạn nhiều nhất có thể chia được.
Với một xâu, ta định nghĩa tỉ lệ của nó là nếu 'D' xuất hiện lần và 'K' xuất hiện lần. Lưu ý hoặc có thể bằng , nhưng không thể cùng bằng . Hai tỉ lệ và được coi là bằng nhau khi và chỉ khi .
Ví dụ, xâu 'DDD' có tỉ lệ , xâu 'DKD' có tỉ lệ , xâu 'DKK' có tỉ lệ , và 'KKKKDD' có tỉ lệ . Hai xâu cuối có tỉ lệ bằng nhau, nhưng khác với tỉ lệ của hai xâu đầu.
Ta cần trả lời câu hỏi cho mọi tiền tố của xâu đã cho: với mỗi , tìm số đoạn nhiều nhất khi chia tiền tố .
Dữ liệu vào
- Dòng đầu chứa số nguyên là số bộ test.
- Mỗi bộ test gồm hai dòng: dòng đầu chứa số nguyên là độ dài tấm gỗ, dòng thứ hai chứa xâu độ dài gồm các ký tự 'D' và 'K'.
Dữ liệu ra
Với mỗi bộ test, in ra số nguyên cách nhau bởi dấu cách. Số thứ là đáp án cho tiền tố .
Ràng buộc
- Tổng trên tất cả các bộ test không vượt quá .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 5 3 DDK 6 DDDDDD 4 DKDK 1 D 9 DKDKDDDDK |
1 2 1 1 2 3 4 5 6 1 1 1 2 1 1 1 1 2 1 2 1 1 3 |
Với bộ test đầu: 'D' và 'DDK' không thể chia thành nhiều hơn một đoạn có tỉ lệ bằng nhau, nhưng 'DD' có thể chia thành 'D' và 'D'. |
| 1 4 DKDK |
1 1 1 2 | Tiền tố 'DKDK' chia được thành 'DK' và 'DK', cả hai đều có tỉ lệ . |
Bình luận