← Home
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
}