← Home
For problem statement at 0-999/300-399/360-369/366/problemE.txt this is a correct solution, but verifier at 0-999/300-399/360-369/366/verifierE.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, 1024*1024), 64*1024*1024)

	scanInt := func() int {
		scanner.Scan()
		res := 0
		for _, b := range scanner.Bytes() {
			res = res*10 + int(b-'0')
		}
		return res
	}

	n := scanInt()
	m := scanInt()
	k := scanInt()
	s := scanInt()

	minS := make([]int, k+1)
	maxS := make([]int, k+1)
	minD := make([]int, k+1)
	maxD := make([]int, k+1)

	for i := 1; i <= k; i++ {
		minS[i] = 1e9
		maxS[i] = -1e9
		minD[i] = 1e9
		maxD[i] = -1e9
	}

	for i := 1; i <= n; i++ {
		for j := 1; j <= m; j++ {
			v := scanInt()
			S := i + j
			D := i - j
			if S < minS[v] {
				minS[v] = S
			}
			if S > maxS[v] {
				maxS[v] = S
			}
			if D < minD[v] {
				minD[v] = D
			}
			if D > maxD[v] {
				maxD[v] = D
			}
		}
	}

	ans := 0
	if s > 0 {
		prev := scanInt()
		for i := 1; i < s; i++ {
			curr := scanInt()
			ans = max(ans, maxS[prev]-minS[curr])
			ans = max(ans, maxS[curr]-minS[prev])
			ans = max(ans, maxD[prev]-minD[curr])
			ans = max(ans, maxD[curr]-minD[prev])
			prev = curr
		}
	}

	fmt.Println(ans)
}