import sys def max_prob_to_pass(n, t, probabilities): dp = [0] * (n + 1) dp[0] = 1.0 # Zaczynamy z prawdopodobieństwem 1 dla 0 punktów for p in probabilities: next_dp = dp[:] for score in range(n - 1, -1, -1): next_dp[score + 1] += dp[score] * p # Dodanie wyniku za poprawną odpowiedź next_dp[score] *= (1 - p) # Utrata szansy przez pominięcie lub złą odp. dp = next_dp return sum(dp[t:]) if __name__ == "__main__": n, t = map(int, sys.stdin.readline().split()) probabilities = [float(sys.stdin.readline().strip()) for _ in range(n)] result = max_prob_to_pass(n, t, probabilities) print(f"{result:.20f}")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import sys def max_prob_to_pass(n, t, probabilities): dp = [0] * (n + 1) dp[0] = 1.0 # Zaczynamy z prawdopodobieństwem 1 dla 0 punktów for p in probabilities: next_dp = dp[:] for score in range(n - 1, -1, -1): next_dp[score + 1] += dp[score] * p # Dodanie wyniku za poprawną odpowiedź next_dp[score] *= (1 - p) # Utrata szansy przez pominięcie lub złą odp. dp = next_dp return sum(dp[t:]) if __name__ == "__main__": n, t = map(int, sys.stdin.readline().split()) probabilities = [float(sys.stdin.readline().strip()) for _ in range(n)] result = max_prob_to_pass(n, t, probabilities) print(f"{result:.20f}") |