Cod sursa(job #1017706)

Utilizator varga13VarGaz13 varga13 Data 28 octombrie 2013 09:48:06
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <stdio.h>
#define m 26
using namespace std;

int s[m];
float rezultat, sanse[m];

int factorial(int n)
{int s=1;
    for(int i=1;i<=n;++i)
        s*=i;
    return s;
}

void print(int k)
{float t=1;
    for(int i=0;i<k;i++)
        t*=sanse[s[i]];
    rezultat+=t;
}

bool ok(int p)
{
    for(int i=0;i<p;++i)
    {
        if(s[p]<=s[i])
            return false;
    }
    return true;
}

void combinari(int n,int k)
{int p=1;
    for(;p>=0;)
    {
        if(s[p]<n)
        {
            ++s[p];
            if(ok(p))
            {
                if(p==k)
                {
                    print(k);
                    p--;
                }

                else
                {
                    ++p;
                    s[p]=0;
                }
            }
        }
        else
        {
            --p;
        }
    }

}

int main()
{int n,k;
    freopen("dezastru.in","r",stdin);
    freopen("dezastru.out","w",stdout);
    scanf("%i%i",&n, &k);
    for(int i=0;i<n;++i)
        scanf("%f", &sanse[i]);

    combinari(n,k);
    printf("%f",rezultat*factorial(k)/factorial(n));
    return 0;
}