For problem statement at 0-999/500-599/500-509/505/problemE.txt this is a correct solution, but verifier at 0-999/500-599/500-509/505/verifierE.go ends with case 1 failed: expected 20 got 23
input:
5 2 1 10
17 3
17 2
18 7
10 2
15 4
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int64 {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') && data[idx] != '-' {
idx++
}
sign := int64(1)
if data[idx] == '-' {
sign = -1
idx++
}
var v int64
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
v = v*10 + int64(data[idx]-'0')
idx++
}
return v * sign
}
n := int(nextInt())
m := int(nextInt())
k := int(nextInt())
p := nextInt()
aArr := make([]int64, n)
gArr := make([]int64, n)
fArr := make([]int64, n)
mi := int64(m)
var maxA int64
var upper int64
for i := 0; i < n; i++ {
h := nextInt()
a := nextInt()
g := mi * a
f := h + g
aArr[i] = a
gArr[i] = g
fArr[i] = f
if a > maxA {
maxA = a
}
if f > upper {
upper = f
}
}
ceilPos := func(x, y int64) int64 {
if x <= 0 {
return 0
}
return (x + y - 1) / y
}
totalCap := int64(m * k)
check := func(H int64) bool {
if H < maxA {
return false
}
cnt := make([]int64, m+1)
var total int64
for i := 0; i < n; i++ {
t := ceilPos(fArr[i]-H, p)
total += t
if total > totalCap {
return false
}
u := ceilPos(gArr[i]-H, p)
a := aArr[i]
for r := int64(0); r < u; r++ {
d := int((H + r*p) / a)
cnt[d]++
}
cnt[m] += t - u
}
var used int64
kk := int64(k)
for s := 1; s <= m; s++ {
used += cnt[s]
if used > int64(s)*kk {
return false
}
}
return true
}
l, r := maxA-1, upper
for l+1 < r {
mid := (l + r) >> 1
if check(mid) {
r = mid
} else {
l = mid
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprint(out, r)
out.Flush()
}