Cod sursa(job #68300)

Utilizator DastasIonescu Vlad Dastas Data 27 iunie 2007 14:58:32
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>

#define maxn 26

FILE *in = fopen("dezastru.in","r"), *out = fopen("dezastru.out","w");

int n, k;
double nr[maxn];
double rez = 0.0;
int st[maxn];
int perm;
double inm = 1.0;

void read_init()
{
    fscanf(in, "%d %d", &n, &k);

    for ( int i = 1; i <= n; ++i )
        fscanf(in, "%lf", &nr[i]);
}

void back(int p)
{
    for ( int i = st[p-1]+1; i <= n; ++i )
    {
        st[p] = i;
        if ( p == k )
        {
            for ( int i = 1; i <= k; ++i )
                inm *= nr[st[i]];
            rez += inm;
            inm = 1.0;
        }
        else
            back(p+1);
    }
}

long long fact(int n)
{
    long long rez = 1;

    for ( int i = 2; i <= n; ++i )
        rez *= i;

    return rez;
}

int main()
{
    read_init();
    perm = fact(n);
    back(1);

    fprintf(out, "%.6lf\n", (rez/perm)*k);

}