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 s gồm n 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à 0) để 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à 1. 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à a:b nếu 'D' xuất hiện a lần và 'K' xuất hiện b lần. Lưu ý a hoặc b có thể bằng 0, nhưng không thể cùng bằng 0. Hai tỉ lệ a:bc:d được coi là bằng nhau khi và chỉ khi a·d=b·c.

Ví dụ, xâu 'DDD' có tỉ lệ 3:0, xâu 'DKD' có tỉ lệ 2:1, xâu 'DKK' có tỉ lệ 1:2, và 'KKKKDD' có tỉ lệ 2:4. 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 i, tìm số đoạn nhiều nhất khi chia tiền tố s1s2si.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t là số bộ test.
  • Mỗi bộ test gồm hai dòng: dòng đầu chứa số nguyên n là độ dài tấm gỗ, dòng thứ hai chứa xâu s độ dài n gồm các ký tự 'D' và 'K'.

Dữ liệu ra

Với mỗi bộ test, in ra n số nguyên cách nhau bởi dấu cách. Số thứ i là đáp án cho tiền tố s1s2si.

Ràng buộc

  • 1t1000
  • 1n5·105
  • Tổng n trên tất cả các bộ test không vượt quá 5·105.

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ệ 1:1.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0