Cod sursa(job #1238088)

Utilizator BogdanisarBurcea Bogdan Madalin Bogdanisar Data 5 octombrie 2014 16:51:25
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#include<iostream>
#include<iomanip>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
long double N,K,nrp=1,rez;
long double v[26],subsir[26];

bool ok(int poz)
{
    for (int i=1;i<poz;++i)
        if (subsir[i]==subsir[poz])
            return 0;
    return 1;
}

void nrperm()
{
    for (int i=2;i<=N;++i)
        nrp*=i;
}

void calc()
{
    //for (int i=1;i<=N;++i)
    //    cout<<subsir[i]<<' ';
    //cout<<'\n';
    long double prod=1;
    for(int k=1;k<=K;++k)
    {
        prod*=v[(int)subsir[k]];
    }
    rez+=prod/nrp;
}

void gaseste(int poz)
{
    for (int k=1;k<=N;++k)
    {
        subsir[poz]=k;
        if (ok(poz))
        {
            if (poz<K)
                gaseste(poz+1);
            else calc();
        }
    }
}

int main()
{
    f>>N>>K;
    for (int i=1;i<=N;++i)
        f>>v[i];
    nrperm();
    //cout<<nrp;
    gaseste(1);
    g<<setprecision(6)<<fixed;
    g<<rez<<'\n';
    f.close();g.close();
    return 0;
}