← Home
For problem statement at 0-999/400-499/420-429/425/problemC.txt this is a correct solution, but verifier at 0-999/400-499/420-429/425/verifierC.go ends with test 1: expected 1 got 2
exit status 1 can you fix the verifier? ```go
package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
		val = val*10 + int(fs.data[fs.idx]-'0')
		fs.idx++
	}
	return val
}

func firstGreater(arr []int, x int) int {
	l, r := 0, len(arr)
	for l < r {
		m := (l + r) >> 1
		if arr[m] <= x {
			l = m + 1
		} else {
			r = m
		}
	}
	return arr[l]
}

func main() {
	in := NewFastScanner()
	n := in.NextInt()
	m := in.NextInt()
	s := in.NextInt()
	e := in.NextInt()

	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = in.NextInt()
	}

	pos := make([][]int, 100001)
	for i := 1; i <= m; i++ {
		x := in.NextInt()
		pos[x] = append(pos[x], i)
	}

	k := s / e
	if k > n {
		k = n
	}
	if k > m {
		k = m
	}
	if k == 0 {
		w := bufio.NewWriterSize(os.Stdout, 1<<20)
		w.WriteString("0")
		w.Flush()
		return
	}

	const INF = int(1e9)

	dp := make([]int, k+1)
	for i := 1; i <= k; i++ {
		dp[i] = INF
	}

	best := make([]int, k+1)
	for i := 1; i <= k; i++ {
		best[i] = -1
	}

	maxLen := 0
	for i := 1; i <= n; i++ {
		x := a[i-1]
		arr := pos[x]
		if len(arr) == 0 {
			continue
		}
		last := arr[len(arr)-1]
		upper := maxLen + 1
		if upper > k {
			upper = k
		}
		if upper > i {
			upper = i
		}
		for lenSub := upper; lenSub >= 1; lenSub-- {
			prev := dp[lenSub-1]
			if prev >= last {
				continue
			}
			sum := i + last
			if sum > best[lenSub] {
				best[lenSub] = sum
			}
			left := firstGreater(arr, prev)
			if left < dp[lenSub] {
				dp[lenSub] = left
				if lenSub > maxLen {
					maxLen = lenSub
				}
			}
		}
	}

	ans := 0
	base := n + m
	for i := 1; i <= k; i++ {
		if best[i] >= 0 && i*e+base-best[i] <= s {
			ans = i
		}
	}

	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	w.WriteString(strconv.Itoa(ans))
	w.Flush()
}
```