Cod sursa(job #1470955)

Utilizator dnprxDan Pracsiu dnprx Data 12 august 2015 18:26:48
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

int n, st[30], k, v[30];
double a[50], solutie;
double fact[30];

void Citire()
{
    int i;
    ifstream fin("dezastru.in");
    fin >> n >> k;
    for (i = 1; i <= n; ++i)
        fin >> a[i];
    fin.close();

    fact[0] = fact[1] = 1;
    for (i = 2; i <= n; ++i)
        fact[i] = fact[i-1] * i;
}

void Calcul()
{
    int i;
    double prob = 1;
    for (i = 1; i <= k; i++)
        prob *= a[st[i]];
    //for (i = 1; i <= k; i++)
    //    cout << st[i] << " ";
    //cout << " ---" << prob << "\n";
    solutie += (prob * fact[n-k]);
}

void Back(int top)
{
    int i;
    if (top == k + 1) Calcul();
    else for (i = 1; i <= n; ++i)
        if (!v[i])
        {
            v[i] = 1;
            st[top] = i;
            Back(top + 1);
            v[i] = 0;
        }
}

void Afisare()
{
    ofstream fout("dezastru.out");
    solutie /= fact[n];
    fout << fixed << setprecision(6) << solutie << "\n";
    fout.close();
}

int main()
{
    Citire();
    Back(1);
    Afisare();
    return 0;
}