Cod sursa(job #2531169)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 25 ianuarie 2020 19:46:49
Problema Dezastru Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<iomanip>

using namespace std;

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

const int Maxx=26;
double A[Maxx];
int sol[Maxx];
double ans;

long long fact(int n){
    if(n==1) return 1;
    return 1LL*n*fact(n-1);
}
bool valid(int k){
    for(int i=1; i<k; ++i){
        if(sol[i]==sol[k]) return 0;
    }
    return 1;
}
void bk(int k,int n,int p){
    if(k==n+1){
        double inter=1;
        for(int i=1; i<=p; ++i){
            inter*=A[sol[i]];
        }
        ans+=inter;
        return;
    }
    for(int i=1; i<=n; ++i){
        sol[k]=i;
        if(valid(k)) {
            bk(k+1,n,p);
        }
    }
}

int main() {
    int n,k;
    fin>>n>>k;
    for(int i=1; i<=n; ++i){
        fin>>A[i];
    }
    long long tot=fact(n);
    bk(1,n,k);
    fout<<setprecision(6)<<fixed<<(double)ans/tot;
    return 0;
}