For problem statement at 1000-1999/1900-1999/1980-1989/1981/problemD.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1980-1989/1981/verifierD.go ends with case 1 failed at position 3
expected: [2 2 5 5 3]
got: [2 2 3 3 5]
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
const MAX_PRIME = 300000
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
isPrime := make([]bool, MAX_PRIME+1)
for i := 2; i <= MAX_PRIME; i++ {
isPrime[i] = true
}
var primes []int
for i := 2; i <= MAX_PRIME; i++ {
if isPrime[i] {
primes = append(primes, i)
for j := i * 2; j <= MAX_PRIME; j += i {
isPrime[j] = false
}
}
}
var T int
if _, err := fmt.Fscan(in, &T); err != nil {
return
}
for t := 0; t < T; t++ {
var n int
fmt.Fscan(in, &n)
k := 1
for {
var edges int
if k%2 == 1 {
edges = k * (k + 1) / 2
} else {
edges = k*k/2 + 1
}
if edges >= n-1 {
break
}
k++
}
type Edge struct {
to, id int
}
adj := make([][]Edge, k)
edgeId := 0
for i := 0; i < k; i++ {
for j := i; j < k; j++ {
if k%2 == 0 && i%2 == 1 && j == i+1 && j <= k-2 {
continue
}
adj[i] = append(adj[i], Edge{j, edgeId})
if i != j {
adj[j] = append(adj[j], Edge{i, edgeId})
}
edgeId++
}
}
visited := make([]bool, edgeId)
ptr := make([]int, k)
path := make([]int, 0, edgeId+1)
stack := []int{0}
for len(stack) > 0 {
u := stack[len(stack)-1]
hasUnvisited := false
for ptr[u] < len(adj[u]) {
e := adj[u][ptr[u]]
ptr[u]++
if !visited[e.id] {
visited[e.id] = true
stack = append(stack, e.to)
hasUnvisited = true
break
}
}
if !hasUnvisited {
path = append(path, u)
stack = stack[:len(stack)-1]
}
}
for i, j := 0, len(path)-1; i < j; i, j = i+1, j-1 {
path[i], path[j] = path[j], path[i]
}
for i := 0; i < n; i++ {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, primes[path[i]])
}
fmt.Fprintln(out)
}
}