1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys

def solve_exam(n, t, probabilities):
    # Sortujemy prawdopodobieństwa malejąco, bo chcemy odpowiadać na najlepsze pytania
    probabilities.sort(reverse=True)

    # DP dla przechowywania prawdopodobieństwa zdobycia dokładnie i punktów
    dp = [0] * (n + 1)
    dp[0] = 1.0  # Prawdopodobieństwo zdobycia 0 punktów na początku

    for p in probabilities:
        for j in range(n, 0, -1):
            dp[j] = dp[j-1] * p + dp[j] * (1 - p)  # Aktualizacja DP

    # Sumujemy prawdopodobieństwa zdobycia t lub więcej punktów
    result = sum(dp[t:])

    return f"{result:.20f}"  # Formatowanie wyniku do 20 miejsc po przecinku

if __name__ == "__main__":
    # Wczytywanie danych wejściowych
    n, t = map(int, sys.stdin.readline().split())
    probabilities = [float(sys.stdin.readline().strip()) for _ in range(n)]
    
    # Rozwiązanie i wypisanie wyniku
    print(solve_exam(n, t, probabilities))