Cod sursa(job #238656)
Utilizator | Data | 2 ianuarie 2009 21:55:22 | |
---|---|---|---|
Problema | Dezastru | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.86 kb |
#include<stdio.h>
int n,a[26],ex[26],p=0,m,i;
float sum,ab,exe[26];
void back(int i)
{int k,x;
for(k=1;k<=n;k++)
{a[i]=k;
if(ex[k]==0)
{
ex[k]=1;
if(i==n)
{p++;
//for(x=1;x<=n;x++)
// printf("%d ",a[x]);
// printf("\n");
ex[k]=0;
}
else
{back(i+1);
ex[k]=0;
}
}
}
}
void back2(int i)
{int k,x;
for(k=1;k<=n;k++)
{a[i]=k;
if(!ex[k])
{
ex[k]=1;
if(i==m)
{ for(x=1;x<=m;x++)
{ ab*=exe[a[x]];
// printf("%.1f ",exe[a[x]]);
}
// printf("\n");
sum+=ab;
ab=1;
ex[k]=0;
}
else
{back2(i+1);
ex[k]=0;
}
}
}
}
int main ()
{ab=1;
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%f",&exe[i]);
// back(1);
p=1;
for(i=1;i<=n;i++)
p*=i;
back2(1);
printf("%.7f",sum/p);
return 0;
}