For problem statement at 1000-1999/1800-1899/1860-1869/1864/problemB.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1860-1869/1864/verifierB.go ends with panic: invalid argument to Intn
goroutine 1 [running]:
math/rand.(*Rand).Intn(0x400012a100?, 0x40000106c8?)
/usr/local/go/src/math/rand/rand.go:180 +0x64
main.generateCase(0x400006cec0)
/home/ubuntu/codeforces/1000-1999/1800-1899/1860-1869/1864/verifierB.go:47 +0x38
main.main()
/home/ubuntu/codeforces/1000-1999/1800-1899/1860-1869/1864/verifierB.go:88 +0x18c
exit status 2 can you fix the verifier? package main
import (
"bufio"
"io"
"os"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) skipSpaces() {
for fs.idx < fs.n {
b := fs.data[fs.idx]
if b > ' ' {
break
}
fs.idx++
}
}
func (fs *FastScanner) NextInt() int {
fs.skipSpaces()
sign := 1
if fs.data[fs.idx] == '-' {
sign = -1
fs.idx++
}
val := 0
for fs.idx < fs.n {
b := fs.data[fs.idx]
if b < '0' || b > '9' {
break
}
val = val*10 + int(b-'0')
fs.idx++
}
return val * sign
}
func (fs *FastScanner) NextString() string {
fs.skipSpaces()
start := fs.idx
for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
fs.idx++
}
return string(fs.data[start:fs.idx])
}
func main() {
fs := NewFastScanner()
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
t := fs.NextInt()
for ; t > 0; t-- {
n := fs.NextInt()
k := fs.NextInt()
s := fs.NextString()
ans := make([]byte, n)
if k%2 == 0 {
var cnt [26]int
for i := 0; i < n; i++ {
cnt[s[i]-'a']++
}
p := 0
for c := 0; c < 26; c++ {
for cnt[c] > 0 {
ans[p] = byte(c) + 'a'
p++
cnt[c]--
}
}
} else {
var cnt0, cnt1 [26]int
for i := 0; i < n; i++ {
if i%2 == 0 {
cnt0[s[i]-'a']++
} else {
cnt1[s[i]-'a']++
}
}
a0 := make([]byte, 0, (n+1)/2)
a1 := make([]byte, 0, n/2)
for c := 0; c < 26; c++ {
for cnt0[c] > 0 {
a0 = append(a0, byte(c)+'a')
cnt0[c]--
}
for cnt1[c] > 0 {
a1 = append(a1, byte(c)+'a')
cnt1[c]--
}
}
i0, i1 := 0, 0
for i := 0; i < n; i++ {
if i%2 == 0 {
ans[i] = a0[i0]
i0++
} else {
ans[i] = a1[i1]
i1++
}
}
}
out.Write(ans)
out.WriteByte('\n')
}
}