Cod sursa(job #989140)

Utilizator AeroHHorea Stefan AeroH Data 24 august 2013 22:57:52
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
long long int i,j,aranjamente=1,n,k,curk;
int bin[50];
long double rasp,prod=1,aux,dou[50];
long long int comb[50];

void citire()
{
    fin>>n>>k;
    for(i=0;i<n;++i)
    {fin>>dou[i];prod*=dou[i];}
}
void push()
{
    for (int i=0;i<curk;++i)
    ++bin[i];
}
void aranj()
{   int curent=1,mimic=0,mimic2=0;
    comb[0]=0;
    comb[1]=1;
    for (i=2;i<=n+1;++i)
    {curent=i;
    for (j=1;j<=curent;++j)
    {
        mimic=comb[j];
        comb[j]=mimic+mimic2;
        mimic2=mimic;
    }
    }
    aranjamente=comb[curk+1];
}
int main()
{
    citire();
    curk=n-k>k?k:n-k;
    push();aranj();
    if (k==n)
    {
        fout<<prod;
        return 0;
    }
    if (curk==k)
        {
        aux=1;
        for(i=0;i<n;++i)
        if (bin[i])
        aux*=dou[i];
        rasp+=aux;
        }
        else
        {
        aux=prod;
        for(i=0;i<n;++i)
        if (bin[i])
        aux/=dou[i];
        rasp+=aux;
        }

    while(prev_permutation(bin,bin+n))
    {
        if (curk==k)
        {
        aux=1;
        for(i=0;i<n;++i)
        if (bin[i])
        aux*=dou[i];
        rasp+=aux;
        }
        else
        {
        aux=prod;
        for(i=0;i<n;++i)
        if (bin[i])
        aux/=dou[i];
        rasp+=aux;
        }
    }
    fout<<rasp/aranjamente<<'\n';
    return 0;
}