For problem statement at 0-999/900-999/910-919/913/problemD.txt this is a correct solution, but verifier at 0-999/900-999/910-919/913/verifierD.go ends with case 15 failed:
input:
4 39
1 1
1 14
1 2
4 18
expected:
1
1
1
Got:
0
0 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Problem struct {
a int
t int
id int
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
n := readInt(reader)
T := readInt(reader)
problems := make([]Problem, n)
for i := 0; i < n; i++ {
problems[i] = Problem{
a: readInt(reader),
t: readInt(reader),
id: i + 1,
}
}
sort.Slice(problems, func(i, j int) bool {
return problems[i].t < problems[j].t
})
low, high := 0, n
bestS := 0
for low <= high {
mid := (low + high) / 2
count := 0
sumT := 0
for _, p := range problems {
if p.a >= mid {
count++
sumT += p.t
if count == mid {
break
}
}
}
if count == mid && sumT <= T {
bestS = mid
low = mid + 1
} else {
high = mid - 1
}
}
fmt.Fprintf(writer, "%d\n%d\n", bestS, bestS)
if bestS > 0 {
count := 0
for _, p := range problems {
if p.a >= bestS {
if count > 0 {
fmt.Fprint(writer, " ")
}
fmt.Fprint(writer, p.id)
count++
if count == bestS {
break
}
}
}
fmt.Fprintln(writer)
}
}
func readInt(reader *bufio.Reader) int {
b, err := reader.ReadByte()
for err == nil && (b < '0' || b > '9') {
b, err = reader.ReadByte()
}
res := 0
for err == nil && b >= '0' && b <= '9' {
res = res*10 + int(b-'0')
b, err = reader.ReadByte()
}
return res
}