← Home
For problem statement at 1000-1999/1200-1299/1220-1229/1220/problemB.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1220-1229/1220/verifierB.go ends with runtime error: exit status 2
output:
panic: runtime error: integer divide by zero

goroutine 1 [running]:
main.main()
	/tmp/build-4087638239/solution.go:68 +0x458

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"bytes"
	"io"
	"os"
	"strconv"
)

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

	n := int(nextInt())
	M := make([][]int64, n)
	for i := 0; i < n; i++ {
		row := make([]int64, n)
		for j := 0; j < n; j++ {
			row[j] = nextInt()
		}
		M[i] = row
	}

	m12 := M[0][1]
	m13 := M[0][2]
	m23 := M[1][2]
	val := (m12 * m13) / m23

	isqrt := func(x int64) int64 {
		if x <= 0 {
			return 0
		}
		lo, hi := int64(1), int64(1_000_000_000)
		var ans int64
		for lo <= hi {
			mid := (lo + hi) >> 1
			if mid <= x/mid {
				ans = mid
				lo = mid + 1
			} else {
				hi = mid - 1
			}
		}
		return ans
	}

	a1 := isqrt(val)
	a := make([]int64, n)
	a[0] = a1
	for i := 1; i < n; i++ {
		a[i] = M[0][i] / a1
	}

	var out bytes.Buffer
	for i := 0; i < n; i++ {
		if i > 0 {
			out.WriteByte(' ')
		}
		out.WriteString(strconv.FormatInt(a[i], 10))
	}
	out.WriteByte('\n')
	w := bufio.NewWriter(os.Stdout)
	w.Write(out.Bytes())
	w.Flush()
}