Cod sursa(job #698792)

Utilizator RoswenRus Alexandru Roswen Data 29 februarie 2012 16:02:41
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<stdio.h>
FILE *f=fopen("dezastru.in","r"), *g=fopen("dezastru.out","w");
int st[30], n, k, cnt;
float v[30], r;

int valid(int niv)
{
	for(int i=1;i<niv;i++)
		if(st[i]==st[niv])
			return 0;
	return 1;		
}
void sol()
{
	float p=1;
	for(int i=1;i<=k;i++)
		p=p*v[st[i]];
	r+=p;
	cnt++;
}
void bk(int niv)
{
	for(int i=st[niv-1]+1;i<=n;i++)
	{
		st[niv]=i;
		if(valid(niv))
			if(niv==k)
				sol();
			else bk(niv+1);
	}		
}
void cit()
{
	fscanf(f,"%d %d", &n, &k);
	for(int i=1;i<=n;i++)
		fscanf(f,"%f", &v[i]);
}
int main()
{
	cit();
	bk(1);
	fprintf(g,"%.6f", r/cnt);	
	return 0;
}