Cod sursa(job #641240)

Utilizator caen1c a e n caen1 Data 27 noiembrie 2011 17:08:57
Problema Dezastru Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>

#define IN "dezastru.in"
#define OUT "dezastru.out"
#define N 26

double p[N], total;
unsigned long long sol[N], pus[N], n, k, nf;

void calcul(unsigned long long);

int main(void) {

    unsigned long long i;

    freopen(IN, "r", stdin); freopen(OUT, "w", stdout);

    scanf("%llu %llu", &n, &k);

    for(i = 1; i <= n; ++i) {

        scanf("%lf", &p[i]);
        nf *= i;
    }

    calcul(1);

    printf("%.6f\n", total / nf);

    return 0;
}

void calcul(unsigned long long m) {

    unsigned long long i;
    double aux;

    if(m == k + 1) {

        aux = 1;
        for(i = 1; i <= k; ++i)
            aux *= p[sol[i]];
        total += aux;
        ++nf;
    } else {

        for(i = 1; i <= n; ++i) {

            if(!pus[i]) {

                sol[m] = i;
                pus[i] = 1;
                calcul(m + 1);
                pus[i] = 0;
            }
        }
    }
}