← Home
For problem statement at 1000-1999/1200-1299/1250-1259/1250/problemI.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1250-1259/1250/verifierI.go ends with All 105 tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"container/heap"
	"fmt"
	"os"
	"sort"
	"strconv"
)

type Dancer struct {
	val int64
	id  int
}

type State struct {
	sum        int64
	Z          int
	v          int
	next_v     int
	parent     *State
	change_idx int
	change_val int
}

type PriorityQueue []*State

func (pq PriorityQueue) Len() int           { return len(pq) }
func (pq PriorityQueue) Less(i, j int) bool { return pq[i].sum < pq[j].sum }
func (pq PriorityQueue) Swap(i, j int)      { pq[i], pq[j] = pq[j], pq[i] }
func (pq *PriorityQueue) Push(x interface{}) {
	*pq = append(*pq, x.(*State))
}
func (pq *PriorityQueue) Pop() interface{} {
	old := *pq
	n := len(old)
	x := old[n-1]
	*pq = old[0 : n-1]
	return x
}

type Result struct {
	size int
	sum  int64
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1024*1024)
	scanner.Buffer(buf, 10*1024*1024)

	var nextInt = func() int {
		scanner.Scan()
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}
	var nextInt64 = func() int64 {
		scanner.Scan()
		res, _ := strconv.ParseInt(scanner.Text(), 10, 64)
		return res
	}

	scanner.Scan()
	t_str := scanner.Text()
	if t_str == "" {
		return
	}
	t, _ := strconv.Atoi(t_str)

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for tc := 0; tc < t; tc++ {
		n := nextInt()
		k := nextInt64()
		m := nextInt()

		dancers := make([]Dancer, n+1)
		for i := 1; i <= n; i++ {
			dancers[i] = Dancer{val: nextInt64(), id: i}
		}

		sort.Slice(dancers[1:], func(i, j int) bool {
			return dancers[i+1].val < dancers[j+1].val
		})

		A := make([]int64, n+1)
		pref := make([]int64, n+1)
		for i := 1; i <= n; i++ {
			A[i] = dancers[i].val
			pref[i] = pref[i-1] + A[i]
		}

		curr_S := 0
		for i := n; i >= 1; i-- {
			if pref[i] <= k {
				curr_S = i
				break
			}
		}

		if curr_S == 0 {
			fmt.Fprintln(out, 0)
			continue
		}

		r := 0
		results := make([]Result, 0, m)
		var last_state *State
		var last_S int

		for curr_S >= 1 && r < m {
			st := &State{
				sum:        pref[curr_S],
				Z:          curr_S,
				v:          n + 1,
				next_v:     n + 1,
				parent:     nil,
				change_idx: 0,
				change_val: 0,
			}

			pq := &PriorityQueue{}
			heap.Init(pq)
			heap.Push(pq, st)

			for pq.Len() > 0 && r < m {
				curr := heap.Pop(pq).(*State)

				if curr.sum > k {
					break
				}

				r++
				results = append(results, Result{size: curr_S, sum: curr.sum})
				last_state = curr
				last_S = curr_S

				if curr.Z >= 1 && curr.Z < n {
					new_sum := curr.sum - A[curr.Z] + A[curr.Z+1]
					child1 := &State{
						sum:        new_sum,
						Z:          curr.Z - 1,
						v:          curr.Z + 1,
						next_v:     curr.v,
						parent:     curr,
						change_idx: curr.Z,
						change_val: curr.Z + 1,
					}
					heap.Push(pq, child1)
				}

				if curr.Z < curr_S && curr.v+1 < curr.next_v {
					new_sum := curr.sum - A[curr.v] + A[curr.v+1]
					child2 := &State{
						sum:        new_sum,
						Z:          curr.Z,
						v:          curr.v + 1,
						next_v:     curr.next_v,
						parent:     curr,
						change_idx: curr.Z + 1,
						change_val: curr.v + 1,
					}
					heap.Push(pq, child2)
				}
			}
			curr_S--
		}

		fmt.Fprintln(out, r)
		for _, res := range results {
			fmt.Fprintf(out, "%d %d\n", res.size, res.sum)
		}

		var path []*State
		curr_node := last_state
		for curr_node != nil {
			path = append(path, curr_node)
			curr_node = curr_node.parent
		}

		subset := make([]int, last_S+1)
		for j := 1; j <= last_S; j++ {
			subset[j] = j
		}

		for i := len(path) - 1; i >= 0; i-- {
			st := path[i]
			if st.change_idx != 0 {
				subset[st.change_idx] = st.change_val
			}
		}

		for j := 1; j <= last_S; j++ {
			fmt.Fprintf(out, "%d", dancers[subset[j]].id)
			if j < last_S {
				fmt.Fprint(out, " ")
			}
		}
		fmt.Fprintln(out)
	}
}
```