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