Pagini recente » Cod sursa (job #2735253) | Cod sursa (job #2947995) | Cod sursa (job #708252) | Cod sursa (job #2255118) | Cod sursa (job #275143)
Cod sursa(job #275143)
#include<stdio.h>
#define infile "dezastru.in"
#define outfile "dezastru.out"
#define nmax 31
double p[nmax]; //probabilitatile pentru fiecare atac in parte
int c[nmax]; //numarul ultimului atac din combinare
int viz[nmax]; //stie daca vre-o probabilitate este folosita in combinare
int n,k; //avem n! posibilitati de atac..
double prob; //suma tuturor probabilitatilor atacurlir
int nr; //numarul de posibilitati de atac
void citire()
{
int i;
scanf("%d %d\n",&n,&k);
for(i=1;i<=n;i++)
scanf("%lf",&p[i]);
}
void comb(int x, double pr)
{
int i;
if(x>k) //combinare completa
{
prob+=pr; //crestem suma
nr++; //si numarul
}
else
for(i=c[x-1]+1;i<=n-k+x;i++) //luam atacurile care pot fi puse
if(!viz[i]) //daca nu se afla deja in combinare
{
viz[i]=1; //marcam k l-am pus in combinare
c[x]=i; //il punem in combinare
comb(x+1,pr*p[i]); //pozitia urmatoare din combinare
viz[i]=0; //il scoatem din combinare
}
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
citire();
comb(1,1);
printf("%lf",prob/nr);
fclose(stdin);
fclose(stdout);
return 0;
}