Pagini recente » Cod sursa (job #975119) | Cod sursa (job #287693) | Cod sursa (job #2554349) | Cod sursa (job #2547208) | Cod sursa (job #365113)
Cod sursa(job #365113)
/*#include<iostream>
#include<fstream>*/
#include<stdio.h>
#define inf "dezastru.in"
#define outf "dezastru.out"
#define MaxN 26
using namespace std;
//fstream f(inf,ios::in),g(outf,ios::out);
int N,P,k,st[MaxN];
float prob[MaxN],suma,produs=1;
int nrc=0,init=0;
void Citire()
{
prob[0]=1;
//f>>N>>P;
scanf("%d%d",&N,&P);
for(int i=1;i<=N;i++){scanf("%f",&prob[i]);}//f>>prob[i];
}
void Init()
{
if(k==1)st[k]=0;
else st[k]=st[k-1];
}
int Succesor()
{
if(st[k]<N-P+k)
{
if(!init)produs/=prob[st[k]];
st[k]++;
produs*=prob[st[k]];
init=0;
return 1;
}
return 0;
}
int Valid()
{
return 1;
}
int Solutie()
{
return (k==P);
}
void Back()
{
int AS;
k=1;
Init();
while(k>0)
{
do{}while ( (AS=Succesor()) && !Valid() );
if(AS)
{
if(Solutie())
{
nrc++;
//produs=1;
//for(int i=1;i<=P;i++)produs*=prob[st[i]];
suma+=produs;
}
else {init=1;k++;Init();}
}
else {k--;produs/=prob[st[k+1]];}
}
}
int main()
{
freopen(inf,"r",stdin);
freopen(outf,"w",stdout);
Citire();
Back();
printf("%f",suma / (float)(nrc));
//g<< suma / (float)(nrc);
//f.close();
//g.close();
return 0;
}