For problem statement at 0-999/100-199/160-169/163/problemB.txt this is a correct solution, but verifier at 0-999/100-199/160-169/163/verifierB.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
type Lemming struct {
id int
m int
v int
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, 10*1024*1024)
scanInt := func() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
k := scanInt()
h := scanInt()
m := make([]int, n)
for i := 0; i < n; i++ {
m[i] = scanInt()
}
v := make([]int, n)
for i := 0; i < n; i++ {
v[i] = scanInt()
}
lemmings := make([]Lemming, n)
for i := 0; i < n; i++ {
lemmings[i] = Lemming{id: i + 1, m: m[i], v: v[i]}
}
sort.Slice(lemmings, func(i, j int) bool {
if lemmings[i].m != lemmings[j].m {
return lemmings[i].m < lemmings[j].m
}
return lemmings[i].v < lemmings[j].v
})
check := func(t float64) bool {
size := 0
for i := 0; i < n; i++ {
if float64(size+1)*float64(h) <= t*float64(lemmings[i].v) {
size++
if size == k {
return true
}
}
}
return false
}
low := 0.0
high := 1e11
for iter := 0; iter < 100; iter++ {
mid := (low + high) / 2
if check(mid) {
high = mid
} else {
low = mid
}
}
ans := make([]int, 0, k)
size := 0
for i := 0; i < n; i++ {
if float64(size+1)*float64(h) <= high*float64(lemmings[i].v) {
ans = append(ans, lemmings[i].id)
size++
if size == k {
break
}
}
}
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
for i := 0; i < k; i++ {
if i > 0 {
out.WriteByte(' ')
}
fmt.Fprint(out, ans[i])
}
out.WriteByte('\n')
}