For problem statement at 1000-1999/1600-1699/1630-1639/1632/problemD.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1630-1639/1632/verifierD.go ends with case 4 failed: pos 5 expected 0 got 1
input:9
60 53 42 54 100 63 54 17 71
exit status 1 can you fix the verifier? package main
import (
"bufio"
"os"
"strconv"
)
func gcd(a, b int) int {
for b != 0 {
a, b = b, a%b
}
return a
}
type Pair struct {
g int
l int
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
if !scanner.Scan() {
return
}
nStr := scanner.Text()
n, _ := strconv.Atoi(nStr)
a := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
a[i], _ = strconv.Atoi(scanner.Text())
}
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
ans := 0
lastClear := 0
var merged []Pair
for r := 1; r <= n; r++ {
val := a[r-1]
var nextMerged []Pair
nextMerged = append(nextMerged, Pair{val, r})
for _, p := range merged {
ng := gcd(p.g, val)
if nextMerged[len(nextMerged)-1].g != ng {
nextMerged = append(nextMerged, Pair{ng, p.l})
}
}
merged = nextMerged
matched := false
for k, p := range merged {
lMax := p.l
lMin := lastClear + 1
if k+1 < len(merged) {
lMin = merged[k+1].l + 1
}
if p.g >= r-lMax+1 && p.g <= r-lMin+1 {
matched = true
break
}
}
if matched {
ans++
merged = merged[:0]
lastClear = r
}
if r > 1 {
out.WriteByte(' ')
}
out.WriteString(strconv.Itoa(ans))
}
out.WriteByte('\n')
}