Cod sursa(job #1657976)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 20 martie 2016 22:22:33
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <iomanip>
#define VAL 35

using namespace std;

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

int N, K, S, i, j;
int x[VAL];
double v[VAL], sum;
double P, a, b;

int main()
{
    fin >> N >> K;
    a=b=P=1;
    for (i=1; i<=N; i++)
    {
        fin >> v[i];
        a*=i;
        if (i<=K)
        {
            b*=i;
            x[i]=i;
            P*=v[i];
        }
    }
    sum+=P;
    j=K;
    x[K+1]=N;
    while (x[1]<=N-K+1)
    {
        if (x[j]<x[j+1] && x[K]<=N)
        {
            x[j]++;
            P=1;
            for (i=1; i<=K; i++)
              P*=v[x[i]];
            sum+=P;
        }
        else
        {
            j--;
            x[j]++;
            for (i=j+1; i<=K; i++)
              x[i]=x[i-1]+1;
            if (x[K]<=N)
            {
                j=K;
                P=1;
                for (i=1; i<=K; i++)
                  P*=v[x[i]];
                sum+=P;
            }
        }
    }
    sum*=b;
    sum/=a;
    fout << fixed << setprecision(6) << sum << '\n';
    fin.close();
    fout.close();
    return 0;
}