For problem statement at 1000-1999/1800-1899/1840-1849/1842/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1840-1849/1842/verifierD.go ends with All 203 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Game struct {
s string
t int64
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n, m int
if _, err := fmt.Fscan(in, &n, &m); err != nil {
return
}
const INF int64 = 1 << 60
mat := make([][]int64, n+1)
for i := 0; i <= n; i++ {
mat[i] = make([]int64, n+1)
for j := 0; j <= n; j++ {
if i == j {
mat[i][j] = 0
} else {
mat[i][j] = INF
}
}
}
for i := 0; i < m; i++ {
var u, v int
var y int64
fmt.Fscan(in, &u, &v, &y)
mat[u][v] = y
mat[v][u] = y
}
dist := make([]int64, n+1)
used := make([]bool, n+1)
for i := 1; i <= n; i++ {
dist[i] = INF
}
dist[1] = 0
for it := 0; it < n; it++ {
u := 0
for i := 1; i <= n; i++ {
if !used[i] && (u == 0 || dist[i] < dist[u]) {
u = i
}
}
if u == 0 || dist[u] == INF {
break
}
used[u] = true
for v := 1; v <= n; v++ {
if mat[u][v] != INF && dist[v] > dist[u]+mat[u][v] {
dist[v] = dist[u] + mat[u][v]
}
}
}
if dist[n] == INF {
fmt.Fprintln(out, "inf")
return
}
D := dist[n]
q := make([]int64, n+1)
vals := make([]int64, 0, n)
for i := 1; i <= n; i++ {
if dist[i] == INF {
q[i] = 0
} else if dist[i] > D {
q[i] = D
} else {
q[i] = dist[i]
}
vals = append(vals, q[i])
}
sort.Slice(vals, func(i, j int) bool { return vals[i] < vals[j] })
uniq := make([]int64, 0, n)
for _, v := range vals {
if len(uniq) == 0 || uniq[len(uniq)-1] != v {
uniq = append(uniq, v)
}
}
games := make([]Game, 0, len(uniq))
for i := 1; i < len(uniq); i++ {
cur := uniq[i]
prev := uniq[i-1]
if cur == prev {
continue
}
b := make([]byte, n)
for j := 1; j <= n; j++ {
if q[j] < cur {
b[j-1] = '1'
} else {
b[j-1] = '0'
}
}
games = append(games, Game{string(b), cur - prev})
}
fmt.Fprintf(out, "%d %d\n", D, len(games))
for _, g := range games {
fmt.Fprintf(out, "%s %d\n", g.s, g.t)
}
}