Cod sursa(job #793608)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 3 octombrie 2012 16:59:08
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("f.in");
ofstream fout("f.out");
float p[26], rezultat;
int k;

int fact(int x)
{
    if(x == 0) return 1;
    return x * fact(x - 1);
}


void aduna(int x[100])
{
    float s = 1.0;

    for(int i = 1; i <= k; i++) s = s * p[x[i]];

    rezultat = rezultat + s;
}

int bun(int x[100], int k)
{
    int i;
    for(i = 1; i < k; i++) if(x[k] == x[i]) return 0;
    return 1;
}

void back(int x[100], int n, int k)
{
    for(int i = 1; i <= n; i++)
    {
        x[k] = i;
        if(bun(x, k))
        {

            if(k == n) aduna(x);
            else back(x, n, k + 1);
        }
    }
}

int main()
{
    int n, x[100];


    fin >> n >> k;
    for(int i = 1; i <= n; i++) fin >> p[i];
    back(x, n, 1);

    fout << rezultat / fact(n);


    fin.close();
    fout.close();
    return 0;
}