← Home
For problem statement at 0-999/900-999/920-929/922/problemE.txt this is a correct solution, but verifier at 0-999/900-999/920-929/922/verifierE.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

type FastScanner struct {
	r *bufio.Reader
}

func NewFastScanner() *FastScanner {
	return &FastScanner{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}

func (fs *FastScanner) NextInt64() int64 {
	var sign int64 = 1
	var val int64
	c, err := fs.r.ReadByte()
	for (c < '0' || c > '9') && c != '-' {
		c, err = fs.r.ReadByte()
		if err != nil {
			return 0
		}
	}
	if c == '-' {
		sign = -1
		c, _ = fs.r.ReadByte()
	}
	for c >= '0' && c <= '9' {
		val = val*10 + int64(c-'0')
		c, err = fs.r.ReadByte()
		if err != nil {
			return sign * val
		}
	}
	fs.r.UnreadByte()
	return sign * val
}

func main() {
	fs := NewFastScanner()

	n := int(fs.NextInt64())
	W := fs.NextInt64()
	B := fs.NextInt64()
	X := fs.NextInt64()

	c := make([]int, n)
	total := 0
	for i := 0; i < n; i++ {
		c[i] = int(fs.NextInt64())
		total += c[i]
	}

	cost := make([]int64, n)
	for i := 0; i < n; i++ {
		cost[i] = fs.NextInt64()
	}

	const neg int64 = -1
	dp := make([]int64, total+1)
	for i := range dp {
		dp[i] = neg
	}
	dp[0] = W

	sum := 0
	for i := 0; i < n; i++ {
		ndp := make([]int64, total+1)
		for j := range ndp {
			ndp[j] = neg
		}
		for j := 0; j <= sum; j++ {
			if dp[j] < 0 {
				continue
			}
			maxK := c[i]
			if cost[i] > 0 {
				t := int(dp[j] / cost[i])
				if t < maxK {
					maxK = t
				}
			}
			for k := 0; k <= maxK; k++ {
				birds := j + k
				rem := dp[j] - int64(k)*cost[i]
				cap := W + int64(birds)*B
				mana := rem + X
				if mana > cap {
					mana = cap
				}
				if mana > ndp[birds] {
					ndp[birds] = mana
				}
			}
		}
		dp = ndp
		sum += c[i]
	}

	ans := 0
	for i := total; i >= 0; i-- {
		if dp[i] >= 0 {
			ans = i
			break
		}
	}
	fmt.Println(ans)
}