← Home
For problem statement at 2000-2999/2000-2099/2080-2089/2085/problemF1.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2080-2089/2085/verifierF1.go ends with wrong answer on test 1
input:
6
3 2
1 2 1
7 3
2 1 1 3 1 1 2
6 3
1 1 2 2 2 3
6 3
1 2 2 2 2 3
10 5
5 1 3 1 1 2 2 4 1 3
9 4
1 2 3 3 3 3 3 2 4

expected:
0
1
2
3
3
5
got:
0
1
2
3
4
5
exit status 1 can you fix the verifier? package main

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

var pref [3005][3005]int
var suff [3005][3005]int

func solve() {
	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
	}

	type Item struct {
		CL int
		CR int
		D  int
	}
	items := make([]Item, 0, 3005)

	for tc := 0; tc < t; tc++ {
		var n, k int
		fmt.Fscan(reader, &n, &k)

		a := make([]int, n+1)
		for i := 1; i <= n; i++ {
			fmt.Fscan(reader, &a[i])
		}

		for i := 1; i <= n; i++ {
			for v := 1; v <= k; v++ {
				pref[i][v] = pref[i-1][v]
			}
			pref[i][a[i]] = i
		}

		for v := 1; v <= k; v++ {
			suff[n+1][v] = 1e9
		}
		for i := n; i >= 1; i-- {
			for v := 1; v <= k; v++ {
				suff[i][v] = suff[i+1][v]
			}
			suff[i][a[i]] = i
		}

		ans := int(1e15)

		if k%2 == 0 {
			h := k / 2
			C := h * h

			for M := 1; M < n; M++ {
				items = items[:0]
				for v := 1; v <= k; v++ {
					CL := int(1e9)
					if pref[M][v] > 0 {
						CL = -pref[M][v]
					}
					CR := int(1e9)
					if suff[M+1][v] <= n {
						CR = suff[M+1][v]
					}
					items = append(items, Item{CL, CR, CL - CR})
				}

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

				sum := 0
				for i := 0; i < h; i++ {
					sum += items[i].CL
				}
				for i := h; i < k; i++ {
					sum += items[i].CR
				}

				if sum < ans {
					ans = sum
				}
			}
			fmt.Fprintln(writer, ans-C)
		} else {
			h := (k - 1) / 2
			C := h * (h + 1)

			for i := 1; i <= n; i++ {
				vMid := a[i]
				items = items[:0]
				for v := 1; v <= k; v++ {
					if v == vMid {
						continue
					}
					CL := int(1e9)
					if pref[i-1][v] > 0 {
						CL = -pref[i-1][v]
					}
					CR := int(1e9)
					if suff[i+1][v] <= n {
						CR = suff[i+1][v]
					}
					items = append(items, Item{CL, CR, CL - CR})
				}

				sort.Slice(items, func(x, y int) bool {
					return items[x].D < items[y].D
				})

				sum := 0
				for x := 0; x < h; x++ {
					sum += items[x].CL
				}
				for x := h; x < k-1; x++ {
					sum += items[x].CR
				}

				if sum < ans {
					ans = sum
				}
			}
			fmt.Fprintln(writer, ans-C)
		}
	}
}

func main() {
	solve()
}