Cod sursa(job #1131707)

Utilizator DanFodorFODOR Dan Horatiu DanFodor Data 1 martie 2014 00:43:40
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

using namespace std;

int n, k, q, valid[27], comb[27];
double p[27], aux, suma;

void back(int poz)
{
    int i;
    if (poz>k)
    {
        q++;
        aux=1;
        for (i=1; i<=k; i++)
            aux*=p[comb[i]];
        aux+=0.0000000001;
        suma+=aux;
    }
    else
    {
        for (i=comb[poz-1]+1; i<=n-k+poz; i++)
            if (valid[i]==0)
            {
                valid[i]=1;
                comb[poz]=i;
                back(poz+1);
                valid[i]=0;
            }
    }
}

int main()
{
    freopen("dezastru.in", "r", stdin);
    freopen("dezastru.out", "w", stdout);
    scanf("%d %d", &n, &k);
    int i;
    for (i=1; i<=n; i++)
    {
        scanf("%lf", &p[i]);
        p[i]+=0.0000001;
        p[i]*=1000000;
        p[i]=(int)p[i];
        p[i]/=1000000;
        p[i]+=0.0000001;
    }
    back(1);
    printf("%0.6lf", suma/q);
    return 0;
}