← Home
For problem statement at 1000-1999/1400-1499/1430-1439/1433/problemF.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1430-1439/1433/verifierF.go ends with All tests passed can you fix the verifier? package main

import (
	"fmt"
)

func main() {
	var n, m, k int
	if _, err := fmt.Scan(&n, &m, &k); err != nil {
		return
	}

	m2 := m / 2

	dp := make([]int, k)
	for i := 1; i < k; i++ {
		dp[i] = -1
	}

	dpRow := make([][]int, m2+1)
	nextDpRow := make([][]int, m2+1)
	for c := 0; c <= m2; c++ {
		dpRow[c] = make([]int, k)
		nextDpRow[c] = make([]int, k)
	}

	for i := 0; i < n; i++ {
		for c := 0; c <= m2; c++ {
			for r := 0; r < k; r++ {
				dpRow[c][r] = -1
			}
		}
		dpRow[0][0] = 0

		for j := 0; j < m; j++ {
			var x int
			fmt.Scan(&x)

			for c := 0; c <= m2; c++ {
				for r := 0; r < k; r++ {
					nextDpRow[c][r] = dpRow[c][r]
				}
			}

			for c := 0; c < m2; c++ {
				for r := 0; r < k; r++ {
					if dpRow[c][r] != -1 {
						val := dpRow[c][r] + x
						rem := val % k
						if val > nextDpRow[c+1][rem] {
							nextDpRow[c+1][rem] = val
						}
					}
				}
			}

			for c := 0; c <= m2; c++ {
				for r := 0; r < k; r++ {
					dpRow[c][r] = nextDpRow[c][r]
				}
			}
		}

		bestRow := make([]int, k)
		for r := 0; r < k; r++ {
			bestRow[r] = -1
			for c := 0; c <= m2; c++ {
				if dpRow[c][r] > bestRow[r] {
					bestRow[r] = dpRow[c][r]
				}
			}
		}

		nextDp := make([]int, k)
		for r := 0; r < k; r++ {
			nextDp[r] = -1
		}

		for r1 := 0; r1 < k; r1++ {
			if dp[r1] != -1 {
				for r2 := 0; r2 < k; r2++ {
					if bestRow[r2] != -1 {
						val := dp[r1] + bestRow[r2]
						rem := val % k
						if val > nextDp[rem] {
							nextDp[rem] = val
						}
					}
				}
			}
		}
		dp = nextDp
	}

	if dp[0] == -1 {
		fmt.Println(0)
	} else {
		fmt.Println(dp[0])
	}
}