← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)

	for ; t > 0; t-- {
		var n, k int
		fmt.Fscan(in, &n, &k)
		pos := make([]int64, 0, n)
		neg := make([]int64, 0, n)
		for i := 0; i < n; i++ {
			var x int64
			fmt.Fscan(in, &x)
			if x > 0 {
				pos = append(pos, x)
			} else if x < 0 {
				neg = append(neg, -x)
			}
		}

		sort.Slice(pos, func(i, j int) bool { return pos[i] < pos[j] })
		sort.Slice(neg, func(i, j int) bool { return neg[i] < neg[j] })

		var total int64
		var maxDist int64

		for i := len(pos) - 1; i >= 0; i -= k {
			d := pos[i]
			total += 2 * d
			if d > maxDist {
				maxDist = d
			}
		}
		for i := len(neg) - 1; i >= 0; i -= k {
			d := neg[i]
			total += 2 * d
			if d > maxDist {
				maxDist = d
			}
		}

		total -= maxDist
		fmt.Fprintln(out, total)
	}
}
```