← Home
For problem statement at 2000-2999/2100-2199/2100-2109/2101/problemC.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2100-2109/2101/verifierC.go ends with mismatch on test 4: expected 14, got 16 (n=8, a[:min(10)][1 5 2 8 4 1 4 2])
exit status 1 can you fix the verifier? ```go
package main

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

type Item struct {
	id       int
	deadline int
	weight   int
}

type DSU struct {
	parent []int
}

func NewDSU(n int) *DSU {
	p := make([]int, n+1)
	for i := range p {
		p[i] = i
	}
	return &DSU{p}
}

func (d *DSU) Find(x int) int {
	if d.parent[x] == x {
		return x
	}
	d.parent[x] = d.Find(d.parent[x])
	return d.parent[x]
}

func (d *DSU) Union(x, y int) {
	rootX := d.Find(x)
	rootY := d.Find(y)
	if rootX != rootY {
		d.parent[rootX] = rootY
	}
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

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

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

		items := make([]Item, n)
		for i := 0; i < n; i++ {
			var a int
			fmt.Fscan(reader, &a)
			items[i] = Item{
				id:       i + 1,
				deadline: 2 * a,
				weight:   abs(2*(i+1) - n - 1),
			}
		}

		sort.Slice(items, func(i, j int) bool {
			if items[i].weight == items[j].weight {
				return items[i].id > items[j].id
			}
			return items[i].weight > items[j].weight
		})

		dsu := NewDSU(2 * n)
		accepted := make([]int, 0, n)

		for _, item := range items {
			d := item.deadline
			if d > 2*n {
				d = 2 * n
			}
			slot := dsu.Find(d)
			if slot > 0 {
				accepted = append(accepted, item.id)
				dsu.Union(slot, slot-1)
			}
		}

		sort.Ints(accepted)
		m := len(accepted)
		k := m / 2

		var profit int64 = 0
		for i := 0; i < k; i++ {
			profit -= int64(accepted[i])
		}
		for i := m - k; i < m; i++ {
			profit += int64(accepted[i])
		}

		fmt.Fprintln(writer, profit)
	}
}
```