Cod sursa(job #1209788)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 18 iulie 2014 18:09:55
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>
#define SET 1
#define NOT_SET 0

int C[32], N, K;
double P[32], prob_sum;

void generate(double p, int k)
{
    if (k > K)
    {
        // Aduna probabilitatea curenta
        prob_sum += p;
        
    }
    else
    {
        for (int i = 1; i <= N; ++i)
        {
            if (C[i] == NOT_SET)
            {
                C[i] = SET;
                generate(P[i] * p, k+1);
                C[i] = NOT_SET;
            }
        }    
    }
}

int fact(int n)
{
    int f = 1;
    for (int i = 2; i <= n; ++i)
    {
        f *= i;
    }
    
    return f;
}


int main()
{
    freopen("dezastru.in", "r", stdin);
    freopen("dezastru.out", "w", stdout);
    
    scanf("%d %d", &N, &K);
    
    for (int i = 1; i <= N; ++i)
    {
        scanf("%lf", P + i);
    }
    

    generate(1.0, 1);

    double p = prob_sum / fact(N);

    printf("%.6lf", p);
    
    return 0;
}