← Home
For problem statement at 1000-1999/1900-1999/1940-1949/1945/problemF.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1940-1949/1945/verifierF.go ends with case 1 failed: expected 160 8 got 255 3
input:
1
16
20 53 28 16 32 2 78 94 29 29 91 85 11 14 97 99
16 15 11 14 4 10 13 1 8 9 5 12 7 3 2 6
exit status 1 can you fix the verifier? ```go
package main

import (
	"io"
	"os"
	"sort"
	"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] <= ' ' {
		fs.idx++
	}
	sign := 1
	if fs.idx < fs.n && fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int(c-'0')
		fs.idx++
	}
	return val * sign
}

type Pair struct {
	v   int
	pos int
}

func main() {
	fs := NewFastScanner()
	t := fs.NextInt()
	out := make([]byte, 0, t*32)

	for ; t > 0; t-- {
		n := fs.NextInt()

		values := make([]int, n+1)
		for i := 1; i <= n; i++ {
			values[i] = fs.NextInt()
		}

		pairs := make([]Pair, n)
		for pos := 1; pos <= n; pos++ {
			idx := fs.NextInt()
			pairs[pos-1] = Pair{v: values[idx], pos: pos}
		}

		sort.Slice(pairs, func(i, j int) bool {
			return pairs[i].v > pairs[j].v
		})

		active := make([]bool, n+2)
		total, h, small := 0, 0, 0
		bestProd := int64(-1)
		bestK := 0

		for i := 0; i < n; {
			val := pairs[i].v
			j := i
			for j < n && pairs[j].v == val {
				pos := pairs[j].pos
				active[pos] = true
				total++
				if pos <= h {
					small++
				}
				for total-small >= h+1 {
					h++
					if active[h] {
						small++
					}
				}
				j++
			}

			prod := int64(h) * int64(val)
			if prod > bestProd || (prod == bestProd && h < bestK) {
				bestProd = prod
				bestK = h
			}
			i = j
		}

		out = strconv.AppendInt(out, bestProd, 10)
		out = append(out, ' ')
		out = strconv.AppendInt(out, int64(bestK), 10)
		out = append(out, '\n')
	}

	os.Stdout.Write(out)
}
```