← Home
For problem statement at 1000-1999/1900-1999/1920-1929/1921/problemF.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1920-1929/1921/verifierF.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"io"
	"math"
	"os"
)

type Query struct {
	s, d, k int
	idx     int
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	nextInt := func() int {
		sign := 1
		val := 0
		n := len(data)
		for p < n {
			c := data[p]
			if c > ' ' {
				break
			}
			p++
		}
		if p < n && data[p] == '-' {
			sign = -1
			p++
		}
		for p < n {
			c := data[p]
			if c < '0' || c > '9' {
				break
			}
			val = val*10 + int(c-'0')
			p++
		}
		return sign * val
	}

	t := nextInt()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	for tc := 0; tc < t; tc++ {
		n := nextInt()
		q := nextInt()
		a := make([]int64, n)
		for i := 0; i < n; i++ {
			a[i] = int64(nextInt())
		}
		groups := make([][]Query, n+1)
		for i := 0; i < q; i++ {
			s := nextInt()
			d := nextInt()
			k := nextInt()
			groups[d] = append(groups[d], Query{s: s - 1, d: d, k: k, idx: i})
		}
		ans := make([]int64, q)
		B := int(math.Sqrt(float64(n)))
		if B < 1 {
			B = 1
		}

		for d := B + 1; d <= n; d++ {
			if len(groups[d]) == 0 {
				continue
			}
			for _, qu := range groups[d] {
				s0 := qu.s
				res := int64(0)
				pos := s0
				for i := 0; i < qu.k; i++ {
					res += int64(i+1) * a[pos]
					pos += d
				}
				ans[qu.idx] = res
			}
		}

		for d := 1; d <= B; d++ {
			if len(groups[d]) == 0 {
				continue
			}
			S := make([][]int64, d)
			W := make([][]int64, d)
			for r := 0; r < d; r++ {
				if r >= n {
					S[r] = []int64{0}
					W[r] = []int64{0}
					continue
				}
				L := (n-1-r)/d + 1
				Sr := make([]int64, L+1)
				Wr := make([]int64, L+1)
				idx := 0
				for pos := r; pos < n; pos += d {
					val := a[pos]
					Sr[idx+1] = Sr[idx] + val
					Wr[idx+1] = Wr[idx] + int64(idx+1)*val
					idx++
				}
				S[r] = Sr
				W[r] = Wr
			}
			for _, qu := range groups[d] {
				s0 := qu.s
				r := s0 % d
				t0 := s0 / d
				Sr := S[r]
				Wr := W[r]
				tk := t0 + qu.k
				res := (Wr[tk] - Wr[t0]) - int64(t0)*(Sr[tk]-Sr[t0])
				ans[qu.idx] = res
			}
		}

		for i := 0; i < q; i++ {
			if i > 0 {
				fmt.Fprint(out, " ")
			}
			fmt.Fprint(out, ans[i])
		}
		fmt.Fprintln(out)
	}
}
```