Cod sursa(job #1558668)

Utilizator fetti_danutzdezactivat fetti_danutz Data 29 decembrie 2015 14:37:22
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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];
double Sol;
double Nr;

void Read();
double Fact(int x);
void Comb(int k);
void Write(int k);

int main()
{
    Read();
    Nr = Fact( N - K + 1 );

    Comb(1);

    fout << Sol;

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

double Fact(int x)
{
    if ( x == N )
        return double(x);
    return (double(x) * Fact(x + 1));
}

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)
{
    double aux = 1.0;
    for (int i = 1; i <= k; ++i )
        aux *= p[x[i]];
    Sol += aux / Nr;
}

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