For problem statement at 1000-1999/1900-1999/1980-1989/1980/problemD.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1980-1989/1980/verifierD.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func gcd(a, b int) int {
for b != 0 {
a, b = b, a%b
}
return a
}
func check(a []int, skip int) bool {
prevGcd := -1
var prevVal int
first := true
for i := 0; i < len(a); i++ {
if i == skip {
continue
}
if first {
prevVal = a[i]
first = false
} else {
currGcd := gcd(prevVal, a[i])
if prevGcd != -1 && currGcd < prevGcd {
return false
}
prevGcd = currGcd
prevVal = a[i]
}
}
return true
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, 10*1024*1024)
nextInt := func() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
if !scanner.Scan() {
return
}
t, _ := strconv.Atoi(scanner.Text())
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
for tc := 0; tc < t; tc++ {
n := nextInt()
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = nextInt()
}
b := make([]int, n-1)
for i := 0; i < n-1; i++ {
b[i] = gcd(a[i], a[i+1])
}
violation := -1
for i := 0; i < n-2; i++ {
if b[i] > b[i+1] {
violation = i
break
}
}
if violation == -1 {
fmt.Fprintln(writer, "YES")
} else {
ans := false
for k := violation; k <= violation+2; k++ {
if k < n && check(a, k) {
ans = true
break
}
}
if ans {
fmt.Fprintln(writer, "YES")
} else {
fmt.Fprintln(writer, "NO")
}
}
}
}