← Home
For problem statement at 0-999/600-699/670-679/676/problemE.txt this is a correct solution, but verifier at 0-999/600-699/670-679/676/verifierE.go ends with All tests passed can you fix the verifier? package main

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

func evalZero(a []int64, k int64) bool {
	n := len(a) - 1
	if k == 0 {
		return a[0] == 0
	}
	if k == 1 {
		var s int64
		for i := 0; i <= n; i++ {
			s += a[i]
		}
		return s == 0
	}
	if k == -1 {
		var s int64
		for i := 0; i <= n; i++ {
			if i%2 == 0 {
				s += a[i]
			} else {
				s -= a[i]
			}
		}
		return s == 0
	}
	var c int64
	for i := 0; i <= n; i++ {
		t := c + a[i]
		if t%k != 0 {
			return false
		}
		c = t / k
	}
	return c == 0
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n int
	var k int64
	fmt.Fscan(in, &n, &k)

	a := make([]int64, n+1)
	known := make([]bool, n+1)
	unknown := 0

	for i := 0; i <= n; i++ {
		var s string
		fmt.Fscan(in, &s)
		if s == "?" {
			unknown++
		} else {
			v, _ := strconv.ParseInt(s, 10, 64)
			a[i] = v
			known[i] = true
		}
	}

	if unknown == 0 {
		if evalZero(a, k) {
			fmt.Fprintln(out, "Yes")
		} else {
			fmt.Fprintln(out, "No")
		}
		return
	}

	if k == 0 {
		if known[0] {
			if a[0] == 0 {
				fmt.Fprintln(out, "Yes")
			} else {
				fmt.Fprintln(out, "No")
			}
		} else {
			made := n + 1 - unknown
			if made%2 == 1 {
				fmt.Fprintln(out, "Yes")
			} else {
				fmt.Fprintln(out, "No")
			}
		}
		return
	}

	if n%2 == 1 {
		fmt.Fprintln(out, "Yes")
	} else {
		fmt.Fprintln(out, "No")
	}
}