← Home
For problem statement at 0-999/900-999/930-939/935/problemD.txt this is a correct solution, but verifier at 0-999/900-999/930-939/935/verifierD.go ends with All tests passed can you fix the verifier? package main

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

const MOD = 1000000007

func power(base, exp int64) int64 {
	res := int64(1)
	base %= MOD
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % MOD
		}
		base = (base * base) % MOD
		exp /= 2
	}
	return res
}

func readInt(reader *bufio.Reader) int64 {
	var res int64
	var sign int64 = 1
	var c byte
	var err error
	for {
		c, err = reader.ReadByte()
		if err != nil {
			return 0
		}
		if c >= '0' && c <= '9' {
			break
		}
		if c == '-' {
			sign = -1
		}
	}
	res = int64(c - '0')
	for {
		c, err = reader.ReadByte()
		if err != nil {
			break
		}
		if c >= '0' && c <= '9' {
			res = res*10 + int64(c-'0')
		} else {
			break
		}
	}
	return res * sign
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	n := readInt(reader)
	if n == 0 {
		return
	}
	m := readInt(reader)

	s1 := make([]int64, n)
	for i := int64(0); i < n; i++ {
		s1[i] = readInt(reader)
	}

	s2 := make([]int64, n)
	for i := int64(0); i < n; i++ {
		s2[i] = readInt(reader)
	}

	minv := power(m, MOD-2)
	m2inv := power((2*m)%MOD, MOD-2)

	ans := int64(0)
	eq := int64(1)

	for i := int64(0); i < n; i++ {
		a := s1[i]
		b := s2[i]

		if a == 0 && b == 0 {
			prob_gt := ((m - 1) * m2inv) % MOD
			ans = (ans + eq*prob_gt) % MOD
			eq = (eq * minv) % MOD
		} else if a == 0 && b != 0 {
			prob_gt := ((m - b) * minv) % MOD
			ans = (ans + eq*prob_gt) % MOD
			eq = (eq * minv) % MOD
		} else if a != 0 && b == 0 {
			prob_gt := ((a - 1) * minv) % MOD
			ans = (ans + eq*prob_gt) % MOD
			eq = (eq * minv) % MOD
		} else {
			if a > b {
				ans = (ans + eq) % MOD
				break
			} else if a < b {
				break
			}
		}
	}

	fmt.Println(ans)
}