Cod sursa(job #3303288)

Utilizator DragosVNVisanescu Dragos Nicholas DragosVN Data 15 iulie 2025 09:53:19
Problema Dezastru Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("dezastru.in");
ofstream g("dezastru.out");

int n,k,sol[30];
double ans;
unsigned long long F[30];
double v[30];


bool valid(int x)
{
    for(int i=1;i<x;i++)
        if(sol[i]>sol[i+1]||sol[i]==sol[x])
        return 0;
    return 1;
}

bool solutie(int x)
{
    return x==k;
}

void generare(int x)
{
    for(int i=1;i<=n;i++)
    {
        sol[x]=i;
        if(valid(x))
        {
            if(solutie(x))
            {
                double S=1;
                for(int j=1;j<=x;j++)
                {

                    S *= v[sol[j]];
                }
                ans +=( S / ( F[n] / F[n-k] ) * F[k]);
            }
            else
            generare(x+1);
        }
    }
}

int main()
{
    f>>n>>k;
    for(int i=1;i<=n;i++)
        f>>v[i];

    F[0]=1;
    F[1]=1;

    for( unsigned long long i=2;i<=25;i++)
        F[i] = F[i-1] * i;

    generare(1);

    g<<fixed<<setprecision(6)<<ans;

    return 0;
}