Pagini recente » Cod sursa (job #1175154) | Cod sursa (job #2261379) | Arhiva de probleme | Cod sursa (job #1260993) | Cod sursa (job #68618)
Cod sursa(job #68618)
#include <stdio.h>
int n, k, nr;
double P=0, p[26];
double afis(int n, int x[]) {
int i;
double aux=1;
nr++;
for (i=1; i<=n; ++i)
aux*=p[x[i]];
return 2*aux;
}
void comb (int n, int k){
int line, x[30], eSuccesor, eCandidat;
line=1;
x[0]=0; x[1]=0;
while (line>0) {
do {
if (x[line] < n-k+line) {
x[line]++;
eSuccesor=1;
eCandidat=1;
} else eSuccesor=0;
} while (eSuccesor && !eCandidat);
if (eSuccesor)
if (line==k) P+=afis(k, x);
else x[++line]=x[line-1];
else --line;
}
}
int main() {
int i;
FILE *f=fopen ("dezastru.in", "r");
FILE *g=fopen ("dezastru.out", "w");
fscanf (f, "%d %d\n", &n, &k);
for (i=1; i<=n; ++i) fscanf (f, "%lf ", &p[i]);
comb(n, k);
P/=(2*nr);
fprintf (g, "%lf\n", P);
fclose(f);
fclose(g);
return 0;
}