← Home
For problem statement at 0-999/600-699/600-609/601/problemC.txt this is a correct solution, but verifier at 0-999/600-699/600-609/601/verifierC.go ends with All tests passed can you fix the verifier? package main

import (
	"fmt"
)

func main() {
	var n, m int
	if _, err := fmt.Scan(&n, &m); err != nil {
		return
	}
	x := make([]int, n)
	S := 0
	for i := 0; i < n; i++ {
		fmt.Scan(&x[i])
		S += x[i]
	}

	if m == 1 {
		fmt.Printf("%.15f\n", 1.0)
		return
	}

	maxSum := 0
	dp := make([]float64, 1)
	dp[0] = 1.0

	for i := 0; i < n; i++ {
		newMaxSum := maxSum + m
		newDp := make([]float64, newMaxSum+1)
		sumDp := 0.0

		for s := 1; s <= newMaxSum; s++ {
			if s-1 <= maxSum {
				sumDp += dp[s-1]
			}
			if s-1-m >= 0 && s-1-m <= maxSum {
				sumDp -= dp[s-1-m]
			}
			
			if sumDp < 0 {
				sumDp = 0
			}

			val := sumDp
			if s-x[i] >= 0 && s-x[i] <= maxSum {
				val -= dp[s-x[i]]
			}
			
			if val < 0 {
				val = 0
			}
			
			newDp[s] = val / float64(m-1)
		}
		dp = newDp
		maxSum = newMaxSum
	}

	ans := 0.0
	for s := 1; s < S; s++ {
		if s <= maxSum {
			ans += dp[s]
		}
	}

	fmt.Printf("%.15f\n", 1.0+float64(m-1)*ans)
}