For problem statement at 2000-2999/2000-2099/2000-2009/2003/problemC.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2000-2009/2003/verifierC.go ends with All 89 tests passed. can you fix the verifier? package main
import (
"bufio"
"container/heap"
"fmt"
"os"
"strings"
)
type Item struct {
cnt int
ch byte
}
type MaxHeap []Item
func (h MaxHeap) Len() int { return len(h) }
func (h MaxHeap) Less(i, j int) bool { return h[i].cnt > h[j].cnt }
func (h MaxHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *MaxHeap) Push(x interface{}) { *h = append(*h, x.(Item)) }
func (h *MaxHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[:n-1]
return x
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n int
var s string
fmt.Fscan(in, &n, &s)
cnt := make([]int, 26)
dist := 0
for i := 0; i < n; i++ {
c := int(s[i] - 'a')
if cnt[c] == 0 {
dist++
}
cnt[c]++
}
if dist == 1 {
fmt.Fprintln(out, s)
continue
}
mx := 0
for i := 1; i < 26; i++ {
if cnt[i] > cnt[mx] {
mx = i
}
}
extra := 2*cnt[mx] - n - 1
if extra < 0 {
extra = 0
}
cnt[mx] -= extra
h := &MaxHeap{}
heap.Init(h)
for i := 0; i < 26; i++ {
if cnt[i] > 0 {
heap.Push(h, Item{cnt: cnt[i], ch: byte('a' + i)})
}
}
var mid strings.Builder
mid.Grow(n - extra)
prevCnt := 0
var prevCh byte
for h.Len() > 0 {
it := heap.Pop(h).(Item)
mid.WriteByte(it.ch)
it.cnt--
if prevCnt > 0 {
heap.Push(h, Item{cnt: prevCnt, ch: prevCh})
}
if it.cnt > 0 {
prevCnt = it.cnt
prevCh = it.ch
} else {
prevCnt = 0
}
}
var ans strings.Builder
ans.Grow(n)
if extra > 0 {
ans.WriteString(strings.Repeat(string(byte('a'+mx)), extra))
}
ans.WriteString(mid.String())
fmt.Fprintln(out, ans.String())
}
}