← Home
For problem statement at 0-999/100-199/170-179/175/problemD.txt this is a correct solution, but verifier at 0-999/100-199/170-179/175/verifierD.go ends with case 32 failed: expected -0.000000 got 0.000000
exit status 1 can you fix the verifier? ```go
package main

import (
	"fmt"
)

func getS(hp, l, r, p int) []float64 {
	if p == 100 {
		return nil
	}
	dp := make([]float64, hp)
	dp[0] = 1.0
	S := make([]float64, 0, 20000)
	S = append(S, 1.0)

	probMiss := float64(p) / 100.0
	probHit := 1.0 - probMiss
	probEach := probHit / float64(r-l+1)

	sumDp := make([]float64, hp+1)

	for k := 1; ; k++ {
		for i := 0; i < hp; i++ {
			sumDp[i+1] = sumDp[i] + dp[i]
		}

		nextDp := make([]float64, hp)
		currentS := 0.0

		for h := 0; h < hp; h++ {
			val := dp[h] * probMiss

			maxY := h - l
			if maxY >= 0 {
				minY := h - r
				if minY < 0 {
					minY = 0
				}
				val += (sumDp[maxY+1] - sumDp[minY]) * probEach
			}
			nextDp[h] = val
			currentS += val
		}

		S = append(S, currentS)
		dp = nextDp
		if currentS < 1e-13 {
			break
		}
	}
	return S
}

func main() {
	var hpV, dtV, lV, rV, pV int
	var hpE, dtE, lE, rE, pE int

	if _, err := fmt.Scan(&hpV, &dtV, &lV, &rV, &pV, &hpE, &dtE, &lE, &rE, &pE); err != nil {
		return
	}

	if pV == 100 {
		fmt.Printf("%.6f\n", 0.0)
		return
	}
	if pE == 100 {
		fmt.Printf("%.6f\n", 1.0)
		return
	}

	SV := getS(hpE, lV, rV, pV)
	SE := getS(hpV, lE, rE, pE)

	ans := 0.0
	for k := 1; k < len(SV); k++ {
		probK := SV[k-1] - SV[k]
		L := ((k-1)*dtV + dtE - 1) / dtE

		if L < len(SE) {
			ans += probK * SE[L]
		}
	}
	fmt.Printf("%.6f\n", ans)
}
```