← Home
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)
	}
}