Cod sursa(job #1558643)

Utilizator fetti_danutzdezactivat fetti_danutz Data 29 decembrie 2015 14:19:38
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ifstream fin("dezastru.in");
ofstream fout("dezastru.out");


int N, K;
int x[30]; //
bool s[30];
double p[30];
queue<double> Q;
int cont;
double Sol;

void Read();
void Comb(int k);
void Write(int k);

int main()
{
    Read();

    Comb(1);

    while ( !Q.empty() )
    {
        Sol += (Q.front() / cont );
        //fout << Q.front() << ' ' << cont << '\n';
        Q.pop();
    }

    fout << Sol;

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

void Comb(int k)
{
    if ( k > K )
    {
        Write(k - 1);
        return;
    }

    for ( int i = 1; i <= N; ++i )
        if ( !s[i] )
        {
            s[i] = true;
            x[k] = i;
            Comb(k + 1);
            s[i] = false;
        }
}

void Write(int k)
{
    cont++;
    double aux = 1.0;
    for (int i = 1; i <= k; ++i )
        aux *= p[x[i]];
    Q.push(aux);
}

void Read()
{
    fin >> N >> K;
    for (int i = 1; i <= N; ++i )
        fin >> p[i];
}