Cod sursa(job #2616301)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 17 mai 2020 23:44:32
Problema Dezastru Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

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

int n , k;
double  atacuri[26] , stotala=0, p;
int aranjamente[26];
long long nrperm=1;
void aflare_nr_perm(int nr)
{
    for(long long i=2;i<=nr;i++)
        nrperm=(long long)i*nrperm;
}

void bkt_dezastru(int pos, long long inmultitor)
{
    int i;
    if(pos==k+1)
    {
        p=1;
        for(i=1;i<pos;i++)
            p*=atacuri[aranjamente[i]];
        p=(double)p*inmultitor;
        stotala+=p;
    }
    else
    {
        for(i=aranjamente[pos-1]+1;i<=n;i++)
        {
                aranjamente[pos]=i;
                bkt_dezastru(pos+1,nrperm);
        }
    }
}

int main()
{
    int j, nraranjamente=1;
    fin >> n >> k;
    for(j=1;j<=n;j++)
        fin >> atacuri[j];
    j=n-k+1;
    for(j;j<=n;j++)
        nraranjamente=(long long)nraranjamente*j;
    aflare_nr_perm(k);
    bkt_dezastru(1,nrperm);
    stotala/=nraranjamente;
    fout << fixed << showpoint << setprecision(6) << stotala;
    return 0;
}