Cod sursa(job #1796404)

Utilizator paulstepanovStepanov Paul paulstepanov Data 3 noiembrie 2016 14:42:05
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int N,x[10005],R,permut,j=1,M=1;
float A[30],p=1,Prod[30],F;
void Read()
{
    fin>>N>>R;
    for(int i=1;i<=N;++i)
        fin>>A[i];
}

int valid(int k)
{
    int i;
    for(i=1;i<k;++i)
        if(x[k]==x[i]) return 0;
    return 1;
}

int solutie(int k)
{
    return k==N;
}
void afisare(int k)
{
    p=1;
    for(int i=1;i<=R;++i)
        p*=A[x[i]];
    Prod[j]=p; j++; M++;
}
void backtrack(int k)
{
    int i;
    for(i=1;i<=N;++i)
    {
        x[k]=i;
        if(valid(k))
            if(solutie(k))
            {afisare(k);
            permut++;}
        else backtrack(k+1);
    }
}

void CalcandPrint()
{
    for(int j=1;j<M;++j)
        F+=Prod[j]/permut;
    fout<<F;
}
int main()
{
    Read();
    backtrack(1);
    CalcandPrint();
    return 0;
}