Cod sursa(job #2718082)

Utilizator andi1010Brinceanu Andi andi1010 Data 8 martie 2021 14:14:44
Problema Dezastru Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<iostream>
#include<fstream>
using namespace std;
 
int n, v[26], k;
double p[26], s, fact[26];
 
void backtr(int poz, double inm)
{
    if(poz == k + 1)
    {
        s += inm;
        return;
    }
 
    for(int i = v[poz - 1] + 1; i <= n; i++)
    {
        v[poz] = i;
        backtr(poz + 1, inm * p[i]);
    }
 
 
}
 
int main()
{
    ifstream in("dezastru.in");
    ofstream out("dezastru.out");
    in>>n>>k;
    for(int i = 1; i <=n; i++)
        in>>p[i];
    fact[1] = 1;
    for(int i = 2; i <= n; i++)
        fact[i] = fact[i-1] * i;
    backtr(1, fact[n-k] * fact[k]);
    out<<s/fact[n];
    return 0;
}



/*#include<fstream>
using namespace std;

ifstream cin ("dezastru.in");
ofstream cout ("dezastru.out");

int n, v[26], k;
double p[26], s;

double factorial(int n)
{
    double x = 1;
    for(int i = 1; i <= n; i++)
        x *= i;
    return x; 

}

void backtr(int poz)
{
    if(poz == k + 1)
    {
        double inm = 1;
        for(int i = 1; i <= k; i++)
            inm *= p[v[i]];
        inm *= factorial(n-k) * factorial(k);
        s += inm;
        return;
    }

    for(int i = v[poz - 1] + 1; i <= n; i++)
    {
        v[poz] = i;
        backtr(poz + 1);
    }


}

int main()
{
    cin>>n>>k;
    for(int i = 1; i <=n; i++)
        cin>>p[i];
    backtr(1);
    cout<<s/factorial(n);
    return 0;
} */