Cod sursa(job #200508)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 24 iulie 2008 13:36:30
Problema Dezastru Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>
int n,m,nm,s[30];
long nrc;
float prc=1,prt;
float v[30],vs[30];


void btk(){
int k,up;
k=1;s[k]=0;
while(k){
	up=0;
	s[k]++;
	if(s[k]<=nm+k){
		up=1;
		if(k==m) prc*=vs[s[k]];
		else prc*=v[s[k]];
		}
	if(up)
		if(k==m) {prt+=prc;nrc+=n-s[k]+1;prc/=vs[s[k]];goto aici;}
		else {k++;s[k]=s[k-1];}
	else {
aici:	k--;
		if(k) prc=prc/v[s[k]];
		}
	}
}

int main(){
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
int i;
scanf("%d%d",&n,&m);
nm=n-m;
v[0]=1.0;
for(i=1;i<=n;++i) scanf("%f",&v[i]);
vs[n]=v[n];
for(i=n-1;i>0;--i) vs[i]=vs[i+1]+v[i];
if(m==0) {prt=1;nrc=1;}
else btk();
printf("%0.6f",prt/nrc);
return 0;
}