Cod sursa(job #438001)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 10 aprilie 2010 13:31:10
Problema Dezastru Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.02 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 Am_Succesor ()
{
	if (st[k] < n)
	{
		st[k] ++;
		return 1;
	}
	return 0;
}

int E_Valid ()
{
	for (i=1; i<k; ++i)
		if (st[k] == st[i])
			return 0;
	return 1;
}

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);
	
	k = 1;
	st[k] = 0;
	while (k > 0)
	{
		do 
		{ }
		while ( (AS = Am_Succesor()) && !E_Valid () );
		if (AS)
		{
			if (k == n)
			{
				p = 1;
				for (i=1; i<=K; ++i)
					p *= prob[st[i]];
				p /= 6;
				s += p;
				//printf ("%f \n", p);
			}
			else
			{
				k ++;
				st[k] = 0;
			}
		}
		else
			k --;
	}	
	
	//printf ("rez = %f", s);
	
	fprintf (g,"%6f", s);
	fclose(g);
	fclose(f);
	return 0;
}