Cod sursa(job #1890620)

Utilizator lessanleonard savu lessan Data 23 februarie 2017 13:06:36
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
using namespace std;
short int n,m,sol[26];
int cnt;
float v[26],sum;
void init(short int k)
{
    sol[k] = 0;
}
bool succesor(short int k)
{
    if(sol[k]<n)
    {
        sol[k]++;
        return true;
    }
    return false;
}
bool valid(short int k)
{
    for(short int i=1; i<k; i++)
        if(sol[i] == sol[k])
            return false;
    return true;
}
bool solutie(short int k)
{
    return k==m;
}
float tipar()
{
    float sum=1;
    for(short int i=1;i<=m;i++)
        sum*=v[sol[i]];
    return sum;
}
void bkt()
{
    short int k=1;
    init(k);
    while(k)
    {
        if(succesor(k))
        {
            if(valid(k))
            {
                if(solutie(k))
                {
                    sum += tipar();
                    cnt++;
                }
                else init(++k);
            }
        }
        else k--;

    }
}
int main()
{
    freopen("dezastru.in","r",stdin);
    freopen("dezastru.out","w",stdout);
    scanf("%hu%hu",&n,&m);
    for(short int i=1; i<=n; i++)
        scanf("%f",&v[i]);
    bkt();
    printf("%.6f",sum/cnt);
    return 0;
}