Cod sursa(job #641235)

Utilizator caen1c a e n caen1 Data 27 noiembrie 2011 16:51:05
Problema Dezastru Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>

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

double p[N], rez;
unsigned long long sol[N], pus[N], n, k, nf = 1;

void calcul(int);

int main(void) {

    int i;

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

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

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

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

    calcul(1);

    printf("%.6f\n", rez);

    return 0;
}

void calcul(int m) {

    int i;
    double aux;

    if(m == k + 1) {

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

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

            if(!pus[i]) {

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