← Home
For problem statement at 0-999/800-899/830-839/830/problemA.txt this is a correct solution, but verifier at 0-999/800-899/830-839/830/verifierA.go ends with All 100 tests passed can you fix the verifier? package main

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

func abs64(x int64) int64 {
	if x < 0 {
		return -x
	}
	return x
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n, k int
	var p int64
	if _, err := fmt.Fscan(in, &n, &k, &p); err != nil {
		return
	}

	a := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &a[i])
	}
	b := make([]int64, k)
	for i := 0; i < k; i++ {
		fmt.Fscan(in, &b[i])
	}

	sort.Slice(a, func(i, j int) bool { return a[i] < a[j] })
	sort.Slice(b, func(i, j int) bool { return b[i] < b[j] })

	const INF int64 = 1 << 60
	prev := make([]int64, k+1)
	cur := make([]int64, k+1)
	for j := 0; j <= k; j++ {
		prev[j] = 0
	}

	for i := 1; i <= n; i++ {
		cur[0] = INF
		for j := 1; j <= k; j++ {
			t1 := cur[j-1]
			cost := abs64(a[i-1]-b[j-1]) + abs64(b[j-1]-p)
			val := prev[j-1]
			if cost > val {
				val = cost
			}
			if val < t1 {
				cur[j] = val
			} else {
				cur[j] = t1
			}
		}
		prev, cur = cur, prev
	}

	fmt.Fprintln(out, prev[k])
}