For problem statement at 1000-1999/1900-1999/1990-1999/1993/problemE.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1990-1999/1993/verifierE.go ends with reference failed: exit status 2
panic: runtime error: index out of range [0] with length 0
goroutine 1 [running]:
main.solveCase({0x40000a0e78, 0x1, 0x40000a0f18?})
/home/ubuntu/codeforces/1000-1999/1900-1999/1990-1999/1993/1993E.go:88 +0xa6c
main.main()
/home/ubuntu/codeforces/1000-1999/1900-1999/1990-1999/1993/1993E.go:29 +0x1bc
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func abs(x int32) int32 {
if x < 0 {
return -x
}
return x
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
dp := make([]int32, 1<<20)
for tc := 0; tc < t; tc++ {
var n, m int
fmt.Fscan(reader, &n, &m)
A := make([][]int32, n+1)
for i := 0; i <= n; i++ {
A[i] = make([]int32, m+1)
}
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
fmt.Fscan(reader, &A[i][j])
A[i][m] ^= A[i][j]
A[n][j] ^= A[i][j]
A[n][m] ^= A[i][j]
}
}
rowTSP := make([][]int32, m+1)
for i := 0; i <= m; i++ {
rowTSP[i] = make([]int32, n+1)
}
colTSP := make([][]int32, n+1)
for i := 0; i <= n; i++ {
colTSP[i] = make([]int32, m+1)
}
for c := 0; c <= m; c++ {
dist := make([][]int32, n+1)
for i := 0; i <= n; i++ {
dist[i] = make([]int32, n+1)
for j := 0; j <= n; j++ {
var d int32 = 0
for k := 0; k <= m; k++ {
if k != c {
d += abs(A[i][k] - A[j][k])
}
}
dist[i][j] = d
}
}
lim := 1 << (n + 1)
for i := 0; i < lim; i++ {
for j := 0; j <= n; j++ {
dp[(i<<4)|j] = 1e9
}
}
for i := 0; i <= n; i++ {
dp[(1<<i<<4)|i] = 0
}
for mask := 1; mask < lim; mask++ {
for u := 0; u <= n; u++ {
val := dp[(mask<<4)|u]
if val == 1e9 {
continue
}
for v := 0; v <= n; v++ {
if (mask & (1 << v)) == 0 {
nmask := mask | (1 << v)
idx := (nmask << 4) | v
cand := val + dist[u][v]
if cand < dp[idx] {
dp[idx] = cand
}
}
}
}
}
for r := 0; r <= n; r++ {
targetMask := (lim - 1) ^ (1 << r)
var mn int32 = 1e9
if targetMask == 0 {
mn = 0
} else {
for u := 0; u <= n; u++ {
if (targetMask & (1 << u)) != 0 {
if dp[(targetMask<<4)|u] < mn {
mn = dp[(targetMask<<4)|u]
}
}
}
}
rowTSP[c][r] = mn
}
}
for r := 0; r <= n; r++ {
dist := make([][]int32, m+1)
for i := 0; i <= m; i++ {
dist[i] = make([]int32, m+1)
for j := 0; j <= m; j++ {
var d int32 = 0
for k := 0; k <= n; k++ {
if k != r {
d += abs(A[k][i] - A[k][j])
}
}
dist[i][j] = d
}
}
lim := 1 << (m + 1)
for i := 0; i < lim; i++ {
for j := 0; j <= m; j++ {
dp[(i<<4)|j] = 1e9
}
}
for i := 0; i <= m; i++ {
dp[(1<<i<<4)|i] = 0
}
for mask := 1; mask < lim; mask++ {
for u := 0; u <= m; u++ {
val := dp[(mask<<4)|u]
if val == 1e9 {
continue
}
for v := 0; v <= m; v++ {
if (mask & (1 << v)) == 0 {
nmask := mask | (1 << v)
idx := (nmask << 4) | v
cand := val + dist[u][v]
if cand < dp[idx] {
dp[idx] = cand
}
}
}
}
}
for c := 0; c <= m; c++ {
targetMask := (lim - 1) ^ (1 << c)
var mn int32 = 1e9
if targetMask == 0 {
mn = 0
} else {
for u := 0; u <= m; u++ {
if (targetMask & (1 << u)) != 0 {
if dp[(targetMask<<4)|u] < mn {
mn = dp[(targetMask<<4)|u]
}
}
}
}
colTSP[r][c] = mn
}
}
var ans int32 = 2e9
for r := 0; r <= n; r++ {
for c := 0; c <= m; c++ {
tot := rowTSP[c][r] + colTSP[r][c]
if tot < ans {
ans = tot
}
}
}
fmt.Fprintln(writer, ans)
}
}