← Home
For problem statement at 1000-1999/1300-1399/1300-1309/1305/problemF.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1300-1309/1305/verifierF.go ends with build oracle failed: exit status 1
# command-line-arguments
./1305F.go:168:20: invalid character U+003F '?'
./1305F.go:168:21: syntax error: unexpected name x, expected )

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"time"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}

	a := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	r.Shuffle(n, func(i, j int) {
		a[i], a[j] = a[j], a[i]
	})

	var ans int64 = 0
	for _, x := range a {
		if x%2 != 0 {
			ans++
		}
	}

	tested := make(map[int64]bool)
	tested[2] = true

	cost := func(p int64, currentMin int64) int64 {
		var c int64 = 0
		for _, x := range a {
			if x < p {
				c += p - x
			} else {
				rem := x % p
				if rem < p-rem {
					c += rem
				} else {
					c += p - rem
				}
			}
			if c >= currentMin {
				return currentMin
			}
		}
		return c
	}

	limit := 40
	if limit > n {
		limit = n
	}

	for i := 0; i < limit; i++ {
		for d := int64(-1); d <= 1; d++ {
			val := a[i] + d
			if val <= 1 {
				continue
			}
			for val%2 == 0 {
				val /= 2
			}
			for div := int64(3); div*div <= val; div += 2 {
				if val%div == 0 {
					if !tested[div] {
						tested[div] = true
						ans = min(ans, cost(div, ans))
					}
					for val%div == 0 {
						val /= div
					}
				}
			}
			if val > 1 && !tested[val] {
				tested[val] = true
				ans = min(ans, cost(val, ans))
			}
		}
	}

	fmt.Println(ans)
}

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}