Cod sursa(job #438015)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 10 aprilie 2010 13:44:25
Problema Dezastru Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>

int st[30];
float prob[30], s, p;
int n, K, i, j;
int k, AS;
long long fact;

long long factorial (int n)
{
	long long fa = 1;
	for (j=2; j<=n; ++j)
		fa *= j;
	return fa;
}
	
int e_valid (int k, int st[100])
{
	for (i=1; i<k; ++i)
		if (st[k] == st[i])
			return 0;
	return 1;
}

float back (int k)
{
	if (k == K + 1)
	{
		/*for (i=1; i<=K; ++i)
			printf ("%d ", st[i]);
		printf ("\n");*/
		p = 1;
		for (i=1; i<=K; ++i)
			p *= prob[st[i]];
		p *= 2;
		p /= fact;
		s += p;
	}
	else
	{
		if (k == 1)
			st[k] = 0;
		else
			st[k] = st[k-1];
		while (st[k] < n)
		{
			st[k] ++;
			back (k + 1);
		}
	}
	return s;
}

int main()
{
	FILE *f = fopen ("dezastru.in","r");
	FILE *g = fopen ("dezastru.out","w");
	fscanf (f,"%d %d", &n, &K);
	for (i=1; i<=n; ++i)
		fscanf (f,"%f", &prob[i]);
	
	fact = factorial (n);
	
	fprintf (g,"%6f", back (1));
	fclose(g);
	fclose(f);
	return 0;
}