← Home
For problem statement at 0-999/600-699/690-699/695/problemA.txt this is a correct solution, but verifier at 0-999/600-699/690-699/695/verifierA.go ends with case 1 failed: expected 0.865830693 0.452251252 0.681918055 got 0.8658307 0.4522513 0.6819181
input:
3 2
0.533981 0.177221 0.288798
exit status 1 can you fix the verifier? package main

import (
	"fmt"
	"math/bits"
)

func main() {
	var n, k int
	if _, err := fmt.Scan(&n, &k); err != nil {
		return
	}

	p := make([]float64, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&p[i])
	}

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

	ans := make([]float64, n)

	for mask := 0; mask < (1<<n); mask++ {
		if dp[mask] == 0 {
			continue
		}
		c := bits.OnesCount(uint(mask))
		var sum_p float64
		for i := 0; i < n; i++ {
			if (mask & (1 << i)) != 0 {
				sum_p += p[i]
			}
		}

		if c == k || 1.0-sum_p < 1e-7 {
			for i := 0; i < n; i++ {
				if (mask & (1 << i)) != 0 {
					ans[i] += dp[mask]
				}
			}
			continue
		}

		for i := 0; i < n; i++ {
			if (mask&(1<<i)) == 0 && p[i] > 0 {
				dp[mask|(1<<i)] += dp[mask] * p[i] / (1.0 - sum_p)
			}
		}
	}

	for i := 0; i < n; i++ {
		if i > 0 {
			fmt.Print(" ")
		}
		fmt.Printf("%.7f", ans[i])
	}
	fmt.Println()
}