← Home
For problem statement at 0-999/900-999/920-929/926/problemH.txt this is a correct solution, but verifier at 0-999/900-999/920-929/926/verifierH.go ends with all tests passed can you fix the verifier? package main

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

func prefix(a []int) []int64 {
	sort.Slice(a, func(i, j int) bool { return a[i] > a[j] })
	p := make([]int64, len(a)+1)
	for i, v := range a {
		p[i+1] = p[i] + int64(v)
	}
	return p
}

func bestPair(po, px []int64, k int) int64 {
	lo := 1
	if k-len(px)+1 > lo {
		lo = k - len(px)
	}
	hi := k - 1
	if len(po) - 1 < hi {
		hi = len(po) - 1
	}
	if lo > hi {
		return -1
	}
	var ans int64 = -1
	for x := lo; x <= hi; x++ {
		y := k - x
		if y >= 1 && y < len(px) {
			s := po[x] + px[y]
			if s > ans {
				ans = s
			}
		}
	}
	return ans
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	var n, k int
	fmt.Fscan(in, &n, &k)

	b := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &b[i])
	}

	var c string
	fmt.Fscan(in, &c)

	var w, o, r []int
	for i := 0; i < n; i++ {
		switch c[i] {
		case 'W':
			w = append(w, b[i])
		case 'O':
			o = append(o, b[i])
		case 'R':
			r = append(r, b[i])
		}
	}

	pw := prefix(w)
	po := prefix(o)
	pr := prefix(r)

	ans1 := bestPair(po, pw, k)
	ans2 := bestPair(po, pr, k)

	ans := ans1
	if ans2 > ans {
		ans = ans2
	}

	fmt.Println(ans)
}