Cod sursa(job #2022876)

Utilizator cristicretancristi cretan cristicretan Data 17 septembrie 2017 16:26:39
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdio>
#define NMax 26
using namespace std;

ifstream f("dezastru.in");
ofstream g("dezastru.out");

int n, p, foo;
float atac[NMax], st[NMax];
float prob[NMax], sol;
bool fol[NMax];

void calc()
{
    float ans = 1.000000;
    for(int i = 1; i <= p; ++i)
        ans *= st[i];
    prob[++foo] = ans;
}

void back(int k)
{
    for(int i = st[k - 1] + 1; i <= n; ++i)
    {
        if(!fol[i])
        {
            fol[i] = true;
            st[k] = atac[i];
            if(k == p) calc();
            else back(k + 1);
            fol[i] = false;
        }
    }
}

int main()
{
    f >> n >> p;
    for(int i = 1; i <= n; ++i)
        f >> atac[i];
    back(1);
    for(int i = 1; i <= foo; ++i)
        sol += prob[i];
    g << setprecision(6) << sol/foo <<'\n' << fixed;
    return 0;
}