Cod sursa(job #2567358)

Utilizator Teo_1101Mititelu Teodor Teo_1101 Data 3 martie 2020 16:50:24
Problema Dezastru Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, K;
long double a[30];

vector < long double > P;
long double x, R;
long double prod = 1;
int ct;
int mex;

void Back( int k )
{
    for( int i = mex+1; i <= N; ++i )
    {
        //cout << a[i]<< ' ';
        int c = mex;
        x = x*a[i];
        mex = i;
        if( k == K )
            {R += x;ct++;}
        else Back( k+1 );
        mex = c;
        x = x/a[i];
    }
}
void Back2( int k )
{
    for( int i = mex+1; i <= N; ++i )
    {
        //cout << a[i]<< ' ';
        int c = mex;
        x = x*a[i];
        mex = i;
        if( k == K )
            {R += prod/x;ct++;}
        else Back2( k+1 );
        mex = c;
        x = x/a[i];
    }
}

void Solve()
{
    fin >> N >> K;
    for( int i = 1; i <= N; ++i )
        {fin >> a[i];prod = prod*a[i];}

    x = 1;
    if( K > N/2 )
    {
        K = N-K;
        Back2( 1 );
    }
    else Back( 1 );

    x = 0;

    //fout << fixed << setprecision( 6 ) << x << '\n';
    R = R/ct;

    fout << fixed << setprecision( 6 ) << R;
}
int main()
{
    Solve();
    return 0;
}