Cod sursa(job #275147)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 10 martie 2009 11:32:27
Problema Dezastru Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 kb
#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 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
			{
			c[x]=i; //il punem in combinare
			comb(x+1,pr*p[i]); //pozitia urmatoare 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;
}