← Home
For problem statement at 0-999/500-599/540-549/542/problemF.txt this is a correct solution, but verifier at 0-999/500-599/540-549/542/verifierF.go ends with All 44 tests passed. can you fix the verifier? package main

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

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	nextInt := func() int {
		for p < len(data) && (data[p] < '0' || data[p] > '9') {
			p++
		}
		v := 0
		for p < len(data) && data[p] >= '0' && data[p] <= '9' {
			v = v*10 + int(data[p]-'0')
			p++
		}
		return v
	}

	n := nextInt()
	T := nextInt()

	groups := make([][]int, T+1)
	for i := 0; i < n; i++ {
		t := nextInt()
		q := nextInt()
		groups[t] = append(groups[t], q)
	}

	prefixCnt := make([]int, T+1)
	prefs := make([][]int, T+1)
	for t := 1; t <= T; t++ {
		prefixCnt[t] = prefixCnt[t-1] + len(groups[t])
		sort.Slice(groups[t], func(i, j int) bool {
			return groups[t][i] > groups[t][j]
		})
		pref := make([]int, len(groups[t])+1)
		for i, v := range groups[t] {
			pref[i+1] = pref[i] + v
		}
		prefs[t] = pref
	}

	dp := make([]int, n+1)
	for i := range dp {
		dp[i] = -1
	}
	dp[1] = 0

	for t := T; t >= 1; t-- {
		capNext := 0
		if t > 1 {
			capNext = prefixCnt[t-1]
		}
		ndp := make([]int, capNext+1)
		for i := range ndp {
			ndp[i] = -1
		}

		pref := prefs[t]
		m := len(pref) - 1

		for c := 0; c < len(dp); c++ {
			if dp[c] < 0 {
				continue
			}
			limit := m
			if c < limit {
				limit = c
			}
			for k := 0; k <= limit; k++ {
				nc := 0
				if t > 1 {
					nc = 2 * (c - k)
					if nc > capNext {
						nc = capNext
					}
				}
				val := dp[c] + pref[k]
				if val > ndp[nc] {
					ndp[nc] = val
				}
			}
		}

		dp = ndp
	}

	out := bufio.NewWriter(os.Stdout)
	fmt.Fprintln(out, dp[0])
	out.Flush()
}