Cod sursa(job #1621508)

Utilizator gorni97aaa aaa gorni97 Data 29 februarie 2016 19:33:44
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
fstream g("dezastru.out",ios::out);
int x[20],k,as,ev,n,k1;
float s=0,v[30];

void init()
{x[k]=0;}

void succesor()
{
    if(x[k]<n)
    {x[k]++;as=1;
    }else as=0;
}

void valid()
{ev=1;
int i;

for(i=1;i<k;i++)
    if(x[i]>=x[i+1]) ev=0;

}

int solutie()
{return (k==k1);}

void tipar()
{int i;
float p=v[x[1]];

    for(i=2;i<=k1;i++)
       p=p*v[x[i]];

       s=s+p;

}

int main()



{ fstream f("dezastru.in",ios::in);

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

    int i,j,a[27][27];

    for(i=0;i<=n;i++)
    {a[i][0]=1;
    a[i][i]=1;}

    for(i=2;i<=n;i++)
    for(j=1;j<i;j++)
    a[i][j]=a[i-1][j]+a[i-1][j-1];



k=1;
init();


while(k>0)
{do{succesor();
if(as)
    valid();
}while((as)&&((!as)||(!ev)));
if(as)
    if(solutie())
    tipar();
else
{k++;init();}
else
    k--;
}
s=s/(a[n][k1]);
g<<fixed<<setprecision(6)<<s;
g.close();

}