Pagini recente » Cod sursa (job #1582996) | Cod sursa (job #2309034) | Cod sursa (job #124692) | Cod sursa (job #1478510) | Cod sursa (job #251420)
Cod sursa(job #251420)
#include <stdio.h>
FILE* fin = fopen("dezastru.in","r");
FILE* fout = fopen("dezastru.out","w");
int n,m,st[30],as,ev,k;
long long nr;
float p[30],rez,x=1;
void init(){
if(k>1)
st[k]=st[k-1];
else
st[k] = 0;
}
int succ(){
if(st[k]<n-m+k){st[k]++;return 1;}
return 0;
}
int valid(){
if(st[k] <= st[k-1] && k>1)return 0;
x*=p[st[k]];
return 1;
}
int sol(){
return k==m;
}
void tipar(){
nr++;
rez+=x;
x/=p[st[k]];
}
void back(){
k=1;
init();
while(k>0){
as=1;ev=0;
while(as&&!ev){
as=succ();
if(as)ev=valid();
}
if(as)
if(sol())tipar();
else{k++;init();}
else{k--;if(k)x/=p[st[k]];}
}
}
int main(){
int i;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(fin,"%f",&p[i]);
back();
fprintf(fout,"%0.6f",rez/nr);
return 0;
}