Thay thế một phần

Đề bài

Mô tả

Cho số nguyên k và một xâu s độ dài n chỉ gồm hai ký tự '.' và ''. Bạn cần thay một số ký tự '' thành 'x' sao cho thoả mãn tất cả các điều kiện sau:

  • Ký tự '*' đầu tiên trong s phải được thay thành 'x'.
  • Ký tự '*' cuối cùng trong s phải được thay thành 'x'.
  • Khoảng cách giữa hai ký tự 'x' liền kề không được vượt quá k. Cụ thể, nếu bạn thay hai vị trí ij (với i<j) thành 'x' và trong đoạn [i+1,j1] không còn ký tự 'x' nào khác, thì ji phải không vượt quá k.

Hãy tìm số lượng ít nhất các ký tự '*' cần thay thành 'x' để thoả mãn các điều kiện trên.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t: số bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm hai dòng:
    • Dòng thứ nhất chứa hai số nguyên nk.
    • Dòng thứ hai chứa xâu s độ dài n chỉ gồm các ký tự '.' và '*'.

Dữ liệu bảo đảm trong s có ít nhất một ký tự '', và khoảng cách giữa hai ký tự '' liền kề bất kỳ không vượt quá k.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra trên một dòng số lượng ít nhất các ký tự '*' cần thay thành 'x'.

Ràng buộc

  • 1t500
  • 1kn50

Ví dụ

Input Output Giải thích
5
7 3
.**.***
5 1
..*..
5 2
*.*.*
3 2
*.*
1 1
*
3
1
3
2
1
Bộ 1: một cách tối ưu là .xx.xxx (thay 3 ký tự). Bộ 2: chỉ có một '*' nên chỉ cần thay 1. Bộ 3: cần thay cả 3 vị trí vì k=2.
3
5 4
*****
5 2
*****
10 3
**********
2
3
4
Với k lớn, ta có thể bỏ qua bớt các '*' ở giữa: bộ 1 chỉ cần thay vị trí đầu và cuối (khoảng cách 4 k).

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