← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	const maxCapacity = 2048 * 1024
	buf := make([]byte, maxCapacity)
	scanner.Buffer(buf, maxCapacity)
	scanner.Split(bufio.ScanWords)

	if !scanner.Scan() {
		return
	}
	t, _ := strconv.Atoi(scanner.Text())

	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	for i := 0; i < t; i++ {
		if !scanner.Scan() {
			break
		}
		n, _ := strconv.Atoi(scanner.Text())

		if !scanner.Scan() {
			break
		}
		k, _ := strconv.Atoi(scanner.Text())

		if !scanner.Scan() {
			break
		}
		s := scanner.Text()

		totalOnes := 0
		for j := 0; j < n; j++ {
			if s[j] == '1' {
				totalOnes++
			}
		}

		maxGain := 0
		for r := 0; r < k; r++ {
			currentSum := 0
			for j := r; j < n; j += k {
				val := -1
				if s[j] == '1' {
					val = 1
				}
				currentSum += val
				if currentSum < 0 {
					currentSum = 0
				}
				if currentSum > maxGain {
					maxGain = currentSum
				}
			}
		}

		fmt.Fprintln(writer, totalOnes-maxGain)
	}
}
```