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()
}